图解算法通识讲义线性结构
二维矩阵、坐标变换与螺旋旋转
核心心智模型:四维边界围栏逐步收缩;转置翻转实现旋转,左上到右下映射空间位置。
核心交互式算法图解演练沙盒
二维矩阵模型
螺旋矩阵顺时针收敛与边界夹逼演练
步骤 1 / 4
当前扫描方向:向右遍历顶行
top:1bottom:2left:0right:2
1(0,0)
2(0,1)
3(0,2)
4(1,0)
5(1,1)
6(1,2)
7(2,0)
8(2,1)
9(2,2)
第一步:从左向右扫描顶行 [1, 2, 3]。完成后收缩上边界 top++ (变为 1)。
关键操作与时空复杂度速查对照表
| 操作 / 算法阶段 | 平均时间 | 最坏时间 | 空间复杂度 | 核心底层机制 |
|---|---|---|---|---|
| 螺旋 / 蛇形扫描 | O(M * N) | O(M * N) | O(1) | 每个单元格恰好访问一次。 |
| 右上角收敛搜索 | O(M + N) | O(M + N) | O(1) | 至多走 M 步行与 N 步列即可命中或排除。 |
template.java
int top = 0, bottom = matrix.length - 1, left = 0, right = matrix[0].length - 1;
List<Integer> res = new ArrayList<>();
while (true) {
for (int i = left; i <= right; i++) res.add(matrix[top][i]);
if (++top > bottom) break;
for (int i = top; i <= bottom; i++) res.add(matrix[i][right]);
if (--right < left) break;
for (int i = right; i >= left; i--) res.add(matrix[bottom][i]);
if (--bottom < top) break;
for (int i = bottom; i >= top; i--) res.add(matrix[i][left]);
if (++left > right) break;
}
return res;解题核心心法提炼
- 矩阵旋转无需开辟辅助数组,分解为「对角线转置 + 镜像翻转」优雅完成。
- 矩阵置零利用第 0 行和第 0 列作为天然标记位,达成 O(1) 额外空间。
- 搜索二维矩阵 II:从矩阵右上角出发,形同二叉搜索树,大于目标左移,小于目标下移。
常见踩坑警示与避坑指南
- 螺旋遍历时收缩边界后忘记立即判定边界交叉,导致单行或单列被重复添加。
对应 Hot 100 实战题目突围
原理已掌握!立即进入沉浸式工作台开始实战演练,强化代码肌肉记忆