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?
-
1.首先找旋转后的第一条规律,设n=4
[0][0]->[0][3]
[0][3]->[3][3]
[1][1]->[1][2]
[0][1]->[1][3]
可以发现规律[i][j]->[j][n-i-1],不考虑in-place就可以使用该规则完成算法。 -
2.再找规律,如图所示:把矩阵分成四块发现A位置旋转后成为B,B旋转成为C,C成为D,D成为A。所以利用一个中间值即可满足in-place的约束条件。
对于A区域,0<=i < n/2 并且i<=j
public class Solution {
public void rotate(int[][] a) {
if(a==null || a.length==0) return;
int n=a.length;
for(int i=0;i<n/2;i++){
for(int j=i;j<n-i-1;j++){
int temp=a[i][j];//临时
a[i][j]=a[n-1-j][i];//A=D
a[n-1-j][i]=a[n-1-i][n-1-j];//D=C
a[n-1-i][n-1-j]=a[j][n-1-i];//C=B
a[j][n-1-i]=temp;//B=temp
}
}
}
}