LeetCode 探索初级算法-数组:11 旋转图像-20200322

11 旋转图像-20200322

题目

给定一个 × n 的二维矩阵表示一个图像。

将图像顺时针旋转 90 度。

示例

给定 matrix = 
[
  [1,2,3],
  [4,5,6],
  [7,8,9]
],

原地旋转输入矩阵,使其变为:
[
  [7,4,1],
  [8,5,2],
  [9,6,3]
]

说明

你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。


注意事项

  1. 图像是一个方阵,长度为n。
  2. 必需在原地操作,不得新开辟数组,但是可以开辟常数个新空间。

思路一

将方阵分层处理,第一层是最外的一层,然后是里面的一层,逐级旋转。层数k={0,...,n/2},每层的索引范围是m=[k,n-k],每一层的旋转规律是 [k+i][ind], [ind][ind-i], [ind-i][k], [k][k+i] = [k][k+i], [k+i][ind], [ind][ind-i], [ind-i][k],其中i=range(k, n-2*k+1)。

修改经历:

1. 开始的逻辑没有找到,只找到第一层,第二层就出问题了。(第一次提交)

  • 解答错误

2. 修改逻辑后,提交成功。(第二次提交)

  • 执行用时 :32 ms, 在所有 Python3 提交中击败了92.72%的用户
  • 内存消耗 :13.6 MB, 在所有 Python3 提交中击败了5.02%的用户

心得体会:

  1. 这个逻辑绕了半天,找了半天的行列关系,总是没对准。。。

最终代码展示:

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n = len(matrix)
        for k in range(0, int(n/2)):
            ind = n - k - 1
            for i in range(0, n-1-2*k):
                matrix[k+i][ind], matrix[ind][ind-i], matrix[ind-i][k], matrix[k][k+i] = matrix[k][k+i], matrix[k+i][ind], matrix[ind][ind-i], matrix[ind-i][k]

思路二

题解大神的思路,转置然后旋转每一行。。。我跪了。。。

修改经历:

1. 一次就成了。(第一次提交)

心得体会:

生命不息,学习不止啊

最终代码展示:

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n = len(matrix)
        for i in range(0, n):
            for j in range(i, n):
                matrix[i][j],  matrix[j][i] =  matrix[j][i],  matrix[i][j]
        for x in matrix:
            x.reverse()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值