螺旋矩阵打印需按“右→下→左→上”顺序遍历并收缩边界:初始top=0、bottom=n−1、left=0、right=n−1;每步后更新对应边界,且每次遍历前须校验边界有效性(如top≤bottom、left≤right),避免越界或重复。
在 java 中用数组实现螺旋矩阵打印,核心在于精准控制四个方向的边界:上、下、左、右。每次按一个方向填充(或遍历)一行/一列后,立即收缩对应边界,直到上下或左右边界交错,循环终止。
明确四边界与移动顺序
定义 top(上边界)、bottom(下边界)、left(左边界)、right(右边界),初始值分别为 0、n−1、0、n−1(以 n×n 矩阵为例)。按固定顺序推进:
- 从左到右遍历 top 行 → 填完后 top++
- 从上到下遍历 right 列 → 填完后 right--
- 从右到左遍历 bottom 行 → 填完后 bottom--
- 从下到上遍历 left 列 → 填完后 left++
每轮四步后检查是否仍满足 top ≤ bottom && left ≤ right,不满足则退出。
注意边界收缩后的有效性校验
尤其在第三、四步(反向遍历时),必须再次判断边界是否依然有效,否则可能重复打印或越界。例如:当只剩一行时(top == bottom),第二步(向下遍历右列)可能已把该行最后一个元素填了,第三步若不加 if (top 就会重复覆盖;同理,第四步前需 <code>if (left 。
这是初学者最容易出错的地方——不是忘了收缩,而是收缩后没验证新边界是否还支持下一步操作。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
用 int[][] 模拟“顺时针填数”更易调试
比起直接打印,先构建一个 n×n 的二维数组并按螺旋顺序填入 1~n²,再逐行输出,逻辑更清晰、便于验证下标是否正确:
- 声明
int[][] matrix = new int[n][n]; - 用变量
num = 1开始递增赋值 - 每个方向循环内执行
matrix[i][j] = num++; - 填完后用嵌套 for 打印,一眼看出螺旋是否连贯、有无空缺或重叠
扩展:适配 m×n 矩形矩阵
只需将初始边界设为:top = 0, bottom = m-1, left = 0, right = n-1,其余逻辑完全一致。循环条件仍是 top 。由于行列数不同,某些方向可能被跳过(如 m=2、n=5 时,最后一圈可能只有左右两步),而边界校验机制天然兼容这种不对称情况,无需额外分支。
这种下标驱动的“剥洋葱”思路,是处理二维数组遍历类问题的通用范式,熟练后可迁移到蛇形填数、对角线遍历、边界层提取等场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










