【题目】
【解题思路】
采用分层来进行平移的方式,将矩阵的每一层都分开进行旋转,比如5*5的矩阵可以分为3层。
旋转的时候,每四个矩阵块作为一组进行相应的旋转。
可以看出,第二次旋转的时候比第一次旋转偏移了一格,这里我们使用 add 变量来记录矩阵块的偏移量,首先不考虑偏移量的时候写出左上角的座标为(pos1,pos1),右上角的座标为(pos1,pos2),左下角的座标为(pos2,pos1),右下角的座标为(pos2,pos2),则能够写出偏移之后对应的座标。
每次计算完一层之后,矩阵向内收缩一层:
所以有pos1 = pos1+1,pos2 = pos2-1,终止的条件为pos1 < pos2。
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
l = 0
r = len(matrix)-1
while l < r:
add = 0
while add < r-l:
tmp_value = matrix[l][l+add]
matrix[l][l+add] = matrix[r-add][l]
matrix[r-add][l] = matrix[r][r-add]
matrix[r][r-add] = matrix[l+add][r]
matrix[l+add][r] = tmp_value
add += 1
l += 1
r -= 1