找回密码
 立即注册
首页 业界区 科技 【忍者算法】从生活场景到螺旋矩阵:探索矩阵的螺旋遍历 ...

【忍者算法】从生活场景到螺旋矩阵:探索矩阵的螺旋遍历|LeetCode 54 螺旋矩阵

向梦桐 2025-6-9 19:44:14
从生活场景到螺旋矩阵:探索矩阵的螺旋遍历

生活中的螺旋

你有没有注意过,生活中螺旋的形状随处可见?比如蜗牛壳的螺旋纹路、向日葵中心的螺旋排列、甚至是停车场的螺旋坡道。这种由外向内(或由内向外)的螺旋路径,不仅是大自然的奇妙设计,也启发了我们解决一些编程问题。
问题描述

LeetCode第54题"螺旋矩阵"是这样描述的:给你一个 m x n 的矩阵,请按照顺时针螺旋顺序,返回矩阵中的所有元素。
例如:
  1. 输入:matrix = [[1,2,3],
  2.                 [4,5,6],
  3.                 [7,8,9]]
  4. 输出:[1,2,3,6,9,8,7,4,5]
复制代码
想象你在逛一个方形的购物中心,从正门开始,按顺时针方向走完每条走廊,最终到达中心的休息区。这就是一个完美的螺旋路径!
最直观的解法:模拟螺旋过程

就像我们在购物中心逛街一样,最直观的方法是:按照右、下、左、上的顺序,一步步"走"过矩阵的每个元素。
让我们用一个简单的3×3矩阵来理解:
  1. 1 2 3     →→→     第一步:向右走到底
  2. 4 5 6     ↓       第二步:向下走到底
  3. 7 8 9     ←←←     第三步:向左走到底
  4.           ↑       第四步:向上走到顶
复制代码
优化解法:边界收缩

仔细观察,我们其实是在不断缩小遍历的范围。就像削苹果皮,从外面一圈圈向内削去。我们可以维护四个边界(上、下、左、右),每走完一个方向就收缩对应的边界。
边界收缩的原理

想象你在玩一个迷宫游戏:

  • 一开始,你可以在整个迷宫中移动
  • 走完一条路径后,那条路就会消失(边界收缩)
  • 在剩余的空间中继续移动
  • 直到走完所有路径
示例运行

用一个3×3的例子来说明:
  1. 初始状态:
  2. 上边界(top)=0, 下边界(bottom)=2
  3. 左边界(left)=0, 右边界(right)=2
  4. 第一圈:
  5. 1. 向右:(0,0)->(0,2) [1,2,3]
  6.    上边界+1
  7. 2. 向下:(0,2)->(2,2) [6,9]
  8.    右边界-1
  9. 3. 向左:(2,2)->(2,0) [8,7]
  10.    下边界-1
  11. 4. 向上:(2,0)->(1,0) [4]
  12.    左边界+1
  13. 第二圈:
  14. 只剩中间的5,直接添加
复制代码
Java代码实现

[code]public List spiralOrder(int[][] matrix) {    List result = new ArrayList();    if (matrix == null || matrix.length == 0) {        return result;    }        // 定义四个边界    int top = 0;    int bottom = matrix.length - 1;    int left = 0;    int right = matrix[0].length - 1;        while (top
您需要登录后才可以回帖 登录 | 立即注册