矩阵

旋转图像

中等#48Java时间 O(n²)空间 O(1)

题目要做什么

把 n×n 方形矩阵原地顺时针旋转 90 度。不能新建另一个矩阵保存结果。

题目示例输入matrix = [[1,2,3],[4,5,6],[7,8,9]]
题目示例输出[[7,4,1],[8,5,2],[9,6,3]]

01 为什么这样做

先沿主对角线转置,把 (r,c) 变成 (c,r);再左右翻转每一行,把列 c 变成 n−1−c,组合后就是 (r,c) → (c,n−1−r)。

始终成立的条件

转置阶段每对对称位置只交换一次;翻转阶段每行两端向中间收缩。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    public void rotate(int[][] matrix) {3        int n = matrix.length;4        for (int r = 0; r < n; r++) {5            for (int c = r + 1; c < n; c++) {6                int temp = matrix[r][c];7                matrix[r][c] = matrix[c][r];8                matrix[c][r] = temp;9            }10        }11        for (int r = 0; r < n; r++) {12            int left = 0, right = n - 1;13            while (left < right) {14                int temp = matrix[r][left];15                matrix[r][left] = matrix[r][right];16                matrix[r][right] = temp;17                left++; right--;18            }19        }20    }21}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索