方法一:(原地旋转)对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个位置。matrix[row][col]
在旋转后的新位置为matrix[col][n−row−1]
。只要旋转四次就能回到原点。


class Solution {
public void rotate(int[][] matrix) {
int tmp, n=matrix.length;
for(int i=0; i<n/2;i++){
for(int j=0;j<(n+1)/2;j++){
tmp = matrix[i][j];
matrix[i][j] = matrix[n-1-j][i];
matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
matrix[j][n-1-i] = tmp;
}
}
}
}
注意:
- 当n为偶数时,需要旋转(n/2)*(n/2)个数,j<n/2 等价于 j<(n+1)/2
- 当n为奇数时,需要旋转(n/2)*((n+1)/2)个数,j<(n+1)/2 等价于 j<(n+1)/2