题目

思路

思路一:两步变化,先转置再每行反转

思路二:按圈做四元环循环变换

Java 解法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;

        for (int i = 0; i < n; i ++) {
            for (int j = i + 1; j < n; j ++) {
                int tmp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = tmp;
            }
        }

        for (int i = 0; i < n; i ++) {
            int l = 0, r = n - 1;
            while (l < r) {
                int tmp = matrix[i][l];
                matrix[i][l] = matrix[i][r];
                matrix[i][r] = tmp;
                l ++;
                r --;
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;

        for (int layer = 0; layer < n / 2; layer ++) {
            int top = layer;
            int bottom = n - 1 - layer;
            int left = layer;
            int right = n - 1 - layer;

            for (int k = 0; k < right - left; k ++) {
                int tmp = matrix[top][left + k];

                matrix[top][left + k] = matrix[bottom - k][left];
                matrix[bottom - k][left] = matrix[bottom][right - k];
                matrix[bottom][right - k] = matrix[top + k][right];
                matrix[top + k][right] = tmp;
            }
        }
    }
}