给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
难度:中等。
算法思路:我发现这道中等题居然通过率达到72%,而且题目要求直接在原矩阵上进行操作,也就是说不要使用另一个举证来旋转图像。直接利用临时变量来旋转当然是可以的,不过我觉得有更好的办法,我发现将矩阵按顺时针旋转90°相当于将矩阵水平翻转一次再延主对角线翻转一次,这直接大大简化了题目的难度。不过我在编写代码的时候挺卡壳的,总是不能很好的处理边界,这里用的是官方题解给的代码。
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
// 水平翻转
for (int i = 0; i < n / 2; ++i) {
for (int j = 0; j < n; ++j) {
int temp = matrix[i][j];
matrix[i][j] = matrix[n - i - 1][j];
matrix[n - i - 1][j] = temp;
}
}
// 主对角线翻转
for (int i = 0; i < n; ++i) {
for (int j = 0; j < i; ++j) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
}
执行用时:
0 ms ,在所有 Java 提交中击败了100%的用户
内存消耗:
38.7 MB, 在所有 Java 提交中击败了14.99%的用户