Loading...

【模拟】顺时针旋转矩阵

在这里插入图片描述

求解代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public int[][] rotateMatrix(int[][] mat, int n) {
        // 空矩阵、空方阵直接返回
        if (mat == null || n == 0) {
            return mat;
        }

        // 矩阵转置(行和列互换)
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                int tmp = mat[i][j];
                mat[i][j] = mat[j][i];
                mat[j][i] = tmp;
            }
        }

        // 反转转置后矩阵的每一行,完成顺时针90度旋转
        for (int[] row : mat) {
            reverse(row);
        }

        return mat;
    }

    // 双指针法原地反转一维数组
    private void reverse(int[] arr) {
        int left = 0;
        int right = arr.length - 1;
        while (left < right) {
            // 交换左右指针元素
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
            left++;
            right--;
        }
    }

小贴士

j0 开始会让对角线上下的元素对被交换两次,交换两次就等于没交换,而ji开始能保证每个元素对只被交换一次。

最后更新于 2026-04-05 17:35:33
Code Road Record