题目

给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
image.png

思路

旋转矩阵 - 图2
设位于左上角的位置坐标为(i,j)

N = 4 左上 右上 右下 左下
旋转前的坐标 (0, 1) (1, 3) (3,2) (2, 0)
旋转后的坐标 (1, 3) (3, 2) (2,0) (0, 1)
抽象后 (i, j) (j, n - i - 1) (n - i - 1, n - j - 1 (n - j - 1, i)

一圈一圈地互换位置
image.png
image.png

  1. class Solution:
  2. def rotate(self, matrix:List[List[int]]) -> None:
  3. """
  4. Do not return anything, modify matrix in-place instead.
  5. """
  6. n = len(matrix)
  7. for i in range(0, n // 2):
  8. for j in range(0, (n + 1) // 2): #考虑n为奇数,比如5,需要枚举(n + 1)/2个位置
  9. temp = matrix[i][j]
  10. matrix[i][j] = matrix[n - j - 1][i]
  11. matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1]
  12. matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1]
  13. matrix[j][n - i - 1] = temp