题目:
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?
0 1 2 3
0 1 2 3 4 替换规律 (0,0)->(0,3)->(3,3)->(3,0)->(0,0) 4个为一循环
1 5 6 7 8 (1,0)->(0,2)->(2,3)->(3,1)->(1,0)
2 9 10 11 12 (2,0)->(0,1)->(1,3)->(3,2)->(2,0)
3 13 14 15 16
(1,1)->(1,2)->(2,2)->(2,1)->(1,1)
4*4数组全部替换,绿色为循环替换的位置,代码如下
public void rotate(int[][] matrix) {
int n = matrix.length-1;
for(int j=0;j<=n/2;j++){
for(int i=j;i<n-j;i++){
int x = matrix[i][j];
matrix[i][j] = matrix[n-j][i];
matrix[n-j][i] = matrix[n-i][n-j];
matrix[n-i][n-j] = matrix[j][n-i];
matrix[j][n-i] = x;
}
}
}
public class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
for(int i=0; i<n; i++)
for(int j=0; j<i; j++){
int x = matrix[i][j];
matrix[i][j] = matrix[j][i]; //两个数交换
matrix[j][i] = x;
}
for(int i=0; i<n; i++){
for(int k=0;k<n/2;k++){
int x = matrix[i][k];
matrix[i][k] = matrix[i][n-1-k]; //数组逆置
matrix[i][n-1-k] = x;
}
}
}
}