力扣热门100题之螺旋矩阵

核心思路

  1. 定义四个边界:上、下、左、右

  2. 按 右 → 下 → 左 → 上 顺序遍历

  3. 每遍历完一条边,就把对应边界往内缩一圈

  4. 直到边界重合,遍历结束

关键判断

  • 遍历下排 前要判断:top <= bottom
  • 遍历左列 前要判断:left <= right防止单行 / 单列时重复遍历

四个方向(固定顺序)

  1. 上排:左 → 右
  2. 右列:上 → 下
  3. 下排:右 → 左
  4. 左列:下 → 上 走完一轮,边界全部往里缩一圈

完整代码实现:

java 复制代码
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        // 判空
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return res;
        }

        // 定义四个边界
        int top = 0; // 上边界
        int bottom = matrix.length - 1; // 下边界
        int left = 0; // 左边界
        int right = matrix[0].length - 1; // 右边界
        // 一直转圈,直到边界越界
        while (top <= bottom && left <= right) {
            // 1. 从左到右遍历上边界
            for (int j = left; j <= right; j++) {
                res.add(matrix[top][j]);
            }
            top++; // 上边界用完,向下缩

            // 2. 从上到下遍历右边界
            for (int i = top; i <= bottom; i++) {
                res.add(matrix[i][right]);
            }
            right--; // 右边界用完,向左缩

            // 3. 从右到左遍历下边界(要判断还有没有剩余行)
            if (top <= bottom) {
                for (int j = right; j >= left; j--) {
                    res.add(matrix[bottom][j]);
                }
                bottom--; // 下边界用完,向上缩
            }

            // 4. 从下到上遍历左边界(要判断还有没有剩余列)
            if (left <= right) {
                for (int i = bottom; i >= top; i--) {
                    res.add(matrix[i][left]);
                }
                left++; // 左边界用完,向右缩
            }
        }
        return res;
    }
}
相关推荐
AKA__Zas1 分钟前
芝士算法(滑动窗口片 2.0)
java·算法·leetcode·学习方法
变量未定义~2 分钟前
摆放小球 、dp求解组合数、求解组合数2
数据结构·算法
加油码11 分钟前
位图 BitMap:用一个 bit 管一个状态,空间直接省到位
c++·算法
四代水门13 分钟前
LeetCode刷算法题(C++)
c++·算法·leetcode
一头老黄牛@15 分钟前
飞书 × OpenClaw 接入指南:不用服务器,用长连接把机器人跑起来
数据结构·人工智能·程序人生·算法·决策树·自动化·推荐算法
Passionate.Z22 分钟前
基于FPGA的CLAHE自适应限制对比度直方图均衡算法硬件verilog实现
图像处理·嵌入式硬件·算法·fpga开发·fpga
菜鸡爱玩4 小时前
线性代数矩阵相乘
线性代数·算法·矩阵
devilnumber8 小时前
Java 递归算法 详解 + 核心要点 + 实战运用 + 避坑指南
java·开发语言·算法
‎ദ്ദിᵔ.˛.ᵔ₎10 小时前
双指针、滑动窗口、前缀和、二分查找 算法
算法
顾北顾10 小时前
多头注意力机制
人工智能·深度学习·算法