每日一题:LeetCode-48. 旋转图像
刷题使我快乐,满脸开心.jpg
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目
给定一个 n × n
的二维矩阵 matrix
表示一个图像。请你将图像顺时针旋转 90
度。
你必须在 原地
旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像
。
示例 1:
示例 2:
提示:
n == matrix.length == matrix[i].length
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000
思路
我的思路比较原始,就是既然是要转,那总归会有一个转的规律,那从题中可以看出:
每一层进行一个
90
度旋转之后,其实每个数据将要旋转到的位置其实是可以用层
和层内坐标
来描述的
如下图:
以第一层为例,每个数据旋转后的位置可以如下表示(l
为层数,i
为层内坐标):
[l][l+i] -> [l+i][n-1-l]
[l+i][n-1-l] -> [n-1-l][n-1-l-i]
[n-1-l][n-1-l-i] -> [n-1-l-i][l]
[n-1-l-i][l] -> [l][l+i]
这里
i
用的是一维数组的下标,用二维数组下标同理
这样描述出来之后,剩下就是层
和层内坐标
的遍历了:
首先是
层数
,这里易得,需要l < n/2
至于
层内坐标
,这里其实最大的限制就是,当前层倒数第一个元素是不需要遍历到的,因为它本身就是当前层一个元素将要到达的位置
那么基本上代码就出来了,上代码
代码
欢迎关注公众号查看更多题目~
版权声明: 本文为 InfoQ 作者【半亩房顶】的原创文章。
原文链接:【http://xie.infoq.cn/article/eec5e6620bbd63d7d9b5ca00b】。文章转载请联系作者。
评论