Hot100:螺旋矩阵(Spiral Matrix)边界收缩模拟 ACERS 解析
副标题 / 摘要 “顺时针螺旋遍历”看似只是打印顺序,实则考验你对边界与循环不变量的掌控。本文用 ACERS 结构给出可直接复用的边界收缩模板,并给出多语言可运行实现。 预计阅读时长:12~15 分钟 标签:Hot100、矩阵、模拟、边界收缩 SEO 关键词:Hot100, Spiral Matrix, 螺旋矩阵, 顺时针螺旋遍历, 边界收缩, LeetCode 54 元描述:用边界收缩法输出矩阵的顺时针螺旋序列,包含推导、工程场景、复杂度对比与多语言代码。 目标读者 正在刷 Hot100、想把“矩阵模拟题”沉淀成模板的同学 对边界条件容易写错、希望提升代码稳健性的中级开发者 做可视化/栅格数据处理/网格路径相关任务的工程师 背景 / 动机 矩阵类题目最容易“写得出来,但写不对”: 多一层循环、多一个边界判断,就可能在单行/单列、奇偶层数时出错或重复输出。 螺旋遍历是一个很好的训练题:它逼你把 循环不变量(哪些行列还没被处理)和 边界收缩(每处理完一条边就把边界往里缩)描述清楚,代码才能既短又不炸。 核心概念 边界(Boundaries):用 top/bottom/left/right 表示当前还未处理的矩形外框 层(Layer):每次循环处理一圈外框(上边、右边、下边、左边) 收缩(Shrink):每处理完一条边就移动对应边界:top++、right--、bottom--、left++ 循环不变量:始终保证未输出区域是 top..bottom × left..right A — Algorithm(题目与算法) 题目还原 给你一个 m 行 n 列的矩阵 matrix,请按照 顺时针螺旋顺序,返回矩阵中的所有元素。 输入输出 名称 类型 描述 matrix int[][] m × n 的矩阵 返回 int[] 按顺时针螺旋顺序输出的所有元素 示例 1(自拟) matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] 输出: [1, 2, 3, 6, 9, 8, 7, 4, 5] 示例 2(自拟) matrix = [ [ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12] ] 输出: [1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7] C — Concepts(核心思想) 思路推导:从“标记访问”到“边界收缩” 朴素思路:方向数组 + visited 标记 从 (0,0) 出发按右/下/左/上转向;走到越界或已访问就转向。 ...