📅  最后修改于: 2023-12-03 15:09:38.617000             🧑  作者: Mango
本文将介绍一种将矩阵顺时针方向旋转 90 度的方法,且不使用任何额外空间。该方法的时间复杂度为 $O(N^2)$,空间复杂度为 $O(1)$。
我们可以先将矩阵沿着左下到右上的对角线翻转,然后再将矩阵沿着中心水平线翻转。步骤如下:
对角线翻转。
1 2 3
4 5 6
7 8 9
经过对角线翻转后,变成了:1 4 7
2 5 8
3 6 9
中心水平线翻转
1 4 7
2 5 8
3 6 9
经过中心水平线翻转后,变成了:7 4 1
8 5 2
9 6 3
def rotate(matrix):
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):
for j in range(n//2):
matrix[i][j], matrix[i][n-j-1] = matrix[i][n-j-1], matrix[i][j]
我们可以写一个测试函数来验证一下代码的正确性。
def test_rotate():
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
rotate(matrix)
assert matrix == [[7, 4, 1], [8, 5, 2], [9, 6, 3]]
matrix = [[5]]
rotate(matrix)
assert matrix == [[5]]
本文介绍了一种将矩阵顺时针方向旋转 90 度的方法,且不使用任何额外空间。这种方法的时间复杂度为 $O(N^2)$,空间复杂度为 $O(1)$。