给你一幅由 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;}}}
}