classSolution: defrotate(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ n = len(matrix) for i inrange(n): for j inrange(n): # 也可以将j改为range(i) if i < j: continue matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
mid = n // 2 for row inrange(n): for column inrange(mid): matrix[row][column], matrix[row][n-column-1] = matrix[row][n-column-1], matrix[row][column]
直接翻转
每次翻转会引起四个数的改变。
四个数的坐标比较难定。
关键规律: 对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个位置。 对应公式:row, col = col, n-row-1
推导得到四个坐标,实际循环的时候,要先将最后一个数放到第一个数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution: defrotate(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ n = len(matrix) for i inrange(n//2): for j inrange((n+1)//2): # print('i,j', i, j) # print("(",i, j, ")"," (",n-j-1, i, ")"," (",n-i-1, n-j-1,") "," (", j, n-i-1,")") 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