class Solution {
public void rotate(int[][] matrix) {
if (matrix.length != matrix[0].length)
return;
int n = matrix.length;
// 解法一:
// int[][] matrixNew = new int[n][n];
// for (int i = 0; i < n; i++) {
// for (int j = 0; j < n; j++) {
// matrixNew[j][n - 1 - i] = matrix[i][j];
// }
// }
// // 将每个位置对应的值写回
// for (int i = 0; i < n; i++) {
// for (int j = 0; j < n; j++) {
// matrix[i][j] = matrixNew[i][j];
// }
// }
// 由于题目限定不能使用新的空间,因此下面采用方法二:
// 解法二:一维数组旋转+方阵原地转置
for (int i = 0; i < n / 2; i++) {
for (int j = 0; j < n; j++) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[n - 1 -i][j];
matrix[n - 1 - i][j] = tmp;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = tmp;
}
}
}
}