【題目】
【解題思路】
採用分層來進行平移的方式,將矩陣的每一層都分開進行旋轉,比如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