将一个正方形的图像顺时针旋转90度。
经过旋转后,A[i][j]=A[j][n-i];n是正方形边长-1。
在旋转的过程中,其实就是四个值的依次替换:A[i][j]----->A[j][n-i]----->A[n-i][n-j]----->A[n-j][i]----->A[i][j]。
如下图所示,四个黄色圆圈按照顺时针相互替换
在遍历时,只需要遍历矩阵的1/4就可以了。矩阵在划分时与长度的奇偶相关。
如果长度是偶数,如右图,即n+1是偶数,i<(n+1)/2,j<(n+1)/2,
如果长度是奇数,如左图,即n+1是奇数,i<(n+1)/2,j<(n+2)/2,
在偶数情况下,j<(n+2)/2与j<(n+1)/2相同,所以取j<(n+2)/2
public void rotate(int[][] matrix) {
int n = matrix.length-1;
if(n < 0)return;
int temp = 0;
for(int i = 0;i < (n+1)/2;i++){
for(int j = 0;j< (n+2)/2;j++){
temp = 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] = temp;
}
}
}