要在原地顺时针旋转一个 n × n 的二维矩阵 90 度,可以按照以下步骤进行:
沿主对角线翻转 :将矩阵沿主对角线(即从左上角到右下角的对角线)翻转。这一步操作后,矩阵的每一行会变为原来矩阵的每一列,但顺序是反向的。沿水平中线翻转:
将每一行沿水平中线(即矩阵的中线)翻转。这一步操作后,矩阵的每一列会变为原来矩阵的每一行,但顺序是反向的。
通过这两步操作,可以实现原地顺时针旋转 90 度。
```python
def rotate(matrix):
n = len(matrix)
Step 1: Transpose the matrix (flip along the main diagonal)
for i in range(n):
for j in range(i, n):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
Step 2: Reverse each row (flip along the horizontal midline)
for i in range(n):
matrix[i].reverse()
```
解释
沿主对角线翻转
```python
for i in range(n):
for j in range(i, n):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
```
这段代码通过两个嵌套的循环,交换了矩阵中每个元素 `matrix[i][j]` 和 `matrix[j][i]`,从而实现沿主对角线的翻转。
沿水平中线翻转
```python
for i in range(n):
matrix[i].reverse()
```
这段代码通过 `reverse()` 方法将每一行反转,从而实现沿水平中线的翻转。
示例
假设输入矩阵为:
```python
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
```
经过上述代码处理后,矩阵将变为:
```python
[
[7, 4, 1],
[8, 5, 2],
[9, 6, 3]
]
```
这种方法不需要额外的空间,直接在原矩阵上进行操作,满足了题目要求的“原地旋转”条件。