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; } } }}