spiralOrder-螺旋矩阵
发布日期:2021-05-18 07:53:20 浏览次数:14 分类:精选文章

本文共 1592 字,大约阅读时间需要 5 分钟。

按照顺时针螺旋顺序遍历矩阵中的所有元素,可以使用层序遍历的方法,每层依次处理右、下、左、上四个方向。具体实现如下:

  • 初始化变量记录当前遍历的行和列范围。
  • 在每层循环中,按顺序处理四个方向的元素。
  • 调整行和列的范围,逐渐向内遍历。
  • 重复上述过程直到整个矩阵被遍历完毕。
  • 以下是具体的代码实现:

    import java.util.ArrayList;import java.util.List;public class Solution {    public List
    spiralOrder(int[][] matrix) { int m = matrix.length; if (m == 0) return new ArrayList<>(); int n = matrix[0].length; List
    result = new ArrayList<>(); int h = 0, l = 0; while (h < m && l < n) { // 向右 for (int i = l; i < n; i++) { result.add(matrix[h][i]); } h++; if (h >= m) break; // 向下 for (int i = h; i < m; i++) { result.add(matrix[i][n-1]); } l++; if (l >= n) break; // 向左 if (h < m) { for (int i = n-1; i >= l; i--) { result.add(matrix[m-1][i]); } m--; } // 向上 if (l < n) { for (int i = m-1; i >= h; i--) { result.add(matrix[i][l-1]); } n--; } } return result; }}

    代码解释

    • 初始化变量hl分别表示当前遍历的行和列的起始位置,mn分别表示矩阵的行数和列数。
    • 循环处理每一层:在每一层循环中,依次处理矩阵的右、下、左、上四个方向。
      • 向右遍历:从当前行的起始列l遍历到列的末尾n-1,然后行索引h加1。
      • 向下遍历:从当前行的h+1遍历到行的末尾m-1,然后列索引l加1。
      • 向左遍历:如果还有行剩余,向左从列的末尾n-1遍历到当前列起始点l,然后行数m减1。
      • 向上遍历:如果还有列剩余,向上从行的末尾m-1遍历到当前行起始点h,然后列数n减1。
    • 终止条件:当行或列索引超出矩阵范围时,退出循环,确保不重复遍历。

    这种方法确保了每个元素按照顺时针螺旋顺序被遍历且只遍历一次,时间复杂度为O(m*n),空间复杂度为O(1)。

    上一篇:reverseBetween-反转链表
    下一篇:isValidSerialization-验证二叉树的额前序序列化

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年05月09日 04时25分40秒