📌  相关文章
📜  将矩阵顺时针方向旋转 90 度而不使用任何额外空间(1)

📅  最后修改于: 2023-12-03 15:09:38.617000             🧑  作者: Mango

将矩阵顺时针方向旋转 90 度而不使用任何额外空间

本文将介绍一种将矩阵顺时针方向旋转 90 度的方法,且不使用任何额外空间。该方法的时间复杂度为 $O(N^2)$,空间复杂度为 $O(1)$。

解决思路

我们可以先将矩阵沿着左下到右上的对角线翻转,然后再将矩阵沿着中心水平线翻转。步骤如下:

  1. 对角线翻转。

    • 从第一行第一列开始往右下遍历矩阵,对于每个元素 $A[i][j]$,将其与 $A[j][i]$ 交换。
    • 例如,对于如下矩阵:
      1 2 3
      4 5 6
      7 8 9
      
      经过对角线翻转后,变成了:
      1 4 7
      2 5 8
      3 6 9
      
  2. 中心水平线翻转

    • 从矩阵第一行开始往下遍历,对于每一行 $A[i]$,将其与 $A[N-i-1]$ 交换。
    • 例如,对于如下矩阵:
      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)$。