【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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值