【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

 

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