You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
思路:分两步走,第一步所有的对角的矩阵, (i, j) 互换 (j, i), 然后每一行reverse。
我们可以看到(2, 4), (3, 7) (6,8)互换之后,每行再reverse一下就可以了。
同理可以做逆时针的rotate;
class Solution {
public void rotate(int[][] matrix) {
if(matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return;
}
int m = matrix.length;
int n = matrix[0].length;
for(int i = 0; i < m; i++) {
for(int j = i + 1; j < n; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
for(int i = 0; i < m; i++) {
reverse(matrix[i]);
}
}
private void reverse(int[] A) {
int start = 0; int end = A.length - 1;
while(start <= end) {
int temp = A[start];
A[start] = A[end];
A[end] = temp;
start++;
end--;
}
}
}