题目
给你一幅由 N × N
矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
思路
设位于左上角的位置坐标为(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) |
一圈一圈地互换位置
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(0, n // 2):
for j in range(0, (n + 1) // 2): #考虑n为奇数,比如5,需要枚举(n + 1)/2个位置
temp = matrix[i][j]
matrix[i][j] = matrix[n - j - 1][i]
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1]
matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1]
matrix[j][n - i - 1] = temp