LeetCode典型题目系列 48. Rotate Image 旋转图像
LeetCode典型题目系列
作为一名学计算机的学生,之前一直少有练习OJ,写博客,维护自己的GitHub的觉悟,说到底还是太懒了。春招以来愈发觉得练习OJ的重要性,于是准备写一些博客,记录自己遇到的典型题目和思考,一方面是给自己的笔记,另一方面给大家参考。个人水平有限,如有谬误请指出,也欢迎大家的讨论。
题目 48. Rotate Image
题目大意是原地旋转二维矩阵,不允许创建新矩阵。
思路
这种二维矩阵的旋转是一类典型题目,写代码时有一些固定的技巧可以使用。
对于给定的 n * n的方阵,从最外层开始处理,每次处理一层,处理完了外层再向里面一层推进,直到未处理的矩阵的size为 0 * 0 或者 1 * 1 结束。
每一层处理的时候可以按照顺时针(本题是按照顺时针旋转)进行。每一层可以看做4组list,以下图为例,分别是黄色框框里的(1, 2)、(3, 6)、(9, 8)、(7, 4)。
每一层要做的就是将4组list里对应位置的数字按照顺时针交换一下。
编程技巧
这类二维矩阵的题目可以用TR表示top row(第一行), TC表示top col(第一列)。同理还有DR,DC。使用这样4个index两两组合,加上offset(偏移量),就可以比较清晰地在矩阵中找到相关数字,具体逻辑请看code:
Code (Java)
// Java code