class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
#非原地操作
n = len(matrix)
# Python 这里不能 matrix_new = matrix 或 matrix_new = matrix[:] 因为是引用拷贝
matrix_new = [[0] * n for _ in range(n)]
for i in range(n):
for j in range(n):
matrix_new[j][n - i - 1] = matrix[i][j]
# 不能写成 matrix = matrix_new
matrix[:] = matrix_new
#原地操作
#1、先反转
#2、按照对角线对称
row,col = len(matrix),len(matrix[0])
matrix.reverse()
for i in range(row):
for j in range(i+1):
if i!=j:
matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j]
- 第一种解法是非原地,声明一个与原数组相同大小的数组,然后找到翻转之后和之前的关系,并将填充后的数组赋值给原数组的引用
- 第二种方法是原地解法:先将行进行翻转,然后再将对角线进行翻转
总结:还是比较简单的一个旋转问题,但是解题还是太慢了。