
方法一:重新开辟一个数组用来辅助
对数组进行顺时针 90° 旋转,总结出的规律就是:第 i 行的第 j 个元素变为 倒数第 i 列的第 j 个元素所在位置。
转成代码为:
matrix[row][col] 旋转 90 °后新位置为 matrixRot[col][matrix.length - 1 - row]
代码如下:
class Solution {
public void rotate(int[][] matrix) {
int[][] matrixRot = new int[matrix.length][matrix[0].length];
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < matrix[0].length; j++){
matrixRot[j][matrix.length - 1 - i] = matrix[i][j];
}
}
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < matrix[0].length; j++){
matrix[i][j] = matrixRot[i][j];
}
}
}
}
时间复杂度为 O(N2),空间复杂度为 O(N2)
方法二:原地旋转
如果不能创建辅助矩阵如何解题?经过分析:矩阵顺时针旋转90°,实际上就是对数组进行 转置 + 竖轴翻转
代码如下:
class Solution {
public void rotate(int[][] matrix) {
//转置
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < i; j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
//竖轴翻转
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < matrix.length / 2; j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[i][matrix.length - 1 - j];
matrix[i][matrix.length - 1 - j] = temp;
}
}
}
}
时间复杂度为 O(N2),空间复杂度为 O(1)。

No responses yet