You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
解1:很容易想到旋转后的矩阵位置对应关系为matrix_new[m][n] = matrix[matrix.length-1-n][m];
因而,一种比较笨的方法是先把matrix复制,再取对应位置的值到matrix中。这种方法在空间复杂度和时间复杂度方面都比较大,效率低。
public class Solution {
public void rotate(int[][] matrix) {
int count = matrix.length;
int[][] copy = new int[count][count];
for (int i = 0;i<count;i++){
for (int j = 0;j<count;j++){
copy[i][j] = matrix[i][j];
}
}
for (int m = 0;m<matrix[0].length;m++){
for (int n = 0;n<matrix.length;n++){
matrix[m][n] = copy[count-1-n][m];
}
}
}
}
解2:观察矩阵,要想实现旋转,可以先求矩阵转置,然后水平对折。如下图(盗图,侵删):
代码如下:
public class Solution {
public void rotate(int[][] matrix) {
int count = matrix.length;
//求转置矩阵
for (int i = 0;i<count;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 m = 0;m<count;m++){
for (int n = 0;n<count/2;n++){
int temp = matrix[m][n];
matrix[m][n] = matrix[m][count-1-n];
matrix[m][count-1-n] = temp;
}
}
}
}