【Leet-Code】48. 旋轉圖像

【題目】

 

【解題思路】

 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章