给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
代码一
思路:对于矩阵中第 ii 行的第 jj 个元素,在旋转后,它出现在倒数第 ii 列的第 jj 个位置。
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
int[][] matrix_new = new int[n][n];
for(int i = 0;i<n;i++){
for(int j = 0;j<n;j++){
matrix_new[j][n-i-1] = matrix[i][j];
}
}
for(int i = 0;i<n;i++){
for(int j = 0;j<n;j++){
matrix[i][j] = matrix_new[i][j];
}
}
}
}
代码二
思路:
顺时针翻转90°
先水平翻转,再主对角线翻转
逆时针翻转90°
先垂直翻转,再主对角线翻转
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
int temp = 0;
//水平翻转
for(int i = 0;i<n/2;i++){
for(int j = 0;j<n;j++){
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++){
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
}