题解
直接旋转
图像旋转,实际上是这四个位置上的数对应旋转。
因此,需要找到这四个位置索引的相互关系:
m
a
t
r
i
x
[
i
]
[
j
]
→
m
a
t
r
i
x
[
j
]
[
n
−
i
−
1
]
→
m
a
t
r
i
x
[
n
−
i
−
1
]
[
n
−
j
−
1
]
→
m
a
t
r
i
x
[
n
−
j
−
1
]
[
i
]
matrix[i][j] \to matrix[j][n-i-1]\to matrix[n-i-1][n-j-1]\to matrix[n-j-1][i]
matrix[i][j]→matrix[j][n−i−1]→matrix[n−i−1][n−j−1]→matrix[n−j−1][i]
注意两个边界条件
行只需遍历一半 ,
[
0
,
n
/
/
2
)
[0,n//2)
[0,n//2)
列需要在
[
i
,
n
−
i
−
1
)
[i,n-i-1)
[i,n−i−1)内
复杂度分析
- 时间复杂度: O ( n 2 ) O\left(n^{2}\right) O(n2)
- 空间复杂度: O ( 1 ) O(1) O(1)
Python
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n = len(matrix)
for i in range(n//2):
for j in range(i, n - i - 1):
matrix[i][j],matrix[j][n-i-1],matrix[n-i-1][n-j-1],matrix[n-j-1][i] = \
matrix[n-j-1][i], matrix[i][j],matrix[j][n-i-1],matrix[n-i-1][n-j-1]
Java(待完成)
转置矩阵的性质
转置后:
每一行逆序:
逆置边界条件
列需要在 [ i , n ) [i,n) [i,n)内
复杂度分析
- 时间复杂度: O ( n 2 ) O\left(n^{2}\right) O(n2)
- 空间复杂度: O ( 1 ) O(1) O(1)
Python
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n=len(matrix)
for i in range(n):
for j in range(i,n):
matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]
for i in range(n):
matrix[i].reverse()