

class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
难点:会覆盖还未移动的值
"""
# n = len(matrix)
# if n == 1:
# return matrix
# temp = []
# for row in range(n):# 数组的每一行
# for i in range(n):
# if i != row and i != n-row-1:
# if i + 1 == n:
# temp.append(matrix[i][n-row-1])
# matrix[i][n-row-1] = temp.pop(0)
# temp.append(matrix[i][n-row-1])
# matrix[i][n-row-1] = matrix[row][i]
-----------------------------------------------------------------------------------------
#上面注释内容的思路有误,一行一行的处理会将暂存栈顺序弄乱,导致无法恢复。于是采用下面一个位置一个未知的移动,外层一圈一圈的进行。
left = 0 # 列序号最左侧
right = len(matrix)-1
while left < right:
for i in range(right-left):# 当前最外层每层旋转次数
top = left # 行序号最上面
bottom = right
topleft = matrix[top][left+i] # 先将左上角的元素存起来
matrix[top][left+i] = matrix[bottom-i][left] # 左下角的元素移动到左上角
matrix[bottom-i][left] = matrix[bottom][right-i]# 右下角的元素移动到左下角
matrix[bottom][right-i] = matrix[top+i][right]# 右上角的元素移动到右下角
matrix[top+i][right] = topleft # 原先存起来的左上角的元素移动到右上角
# 更新最外层
left += 1
right -= 1
不能急于求成,有时候慢也是快,一行一行进行旋转容易错。最关键的还是定四个角,逐步缩小最外层的思路。