力扣热门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;
    }
}
相关推荐
QiLinkOS1 小时前
第三视觉理解徐玉生与他的商业活动(28)
大数据·c++·人工智能·算法·开源协议
wabs6662 小时前
关于动态规划【力扣1143.最长公共子序列的思考】
算法·leetcode·动态规划
剑挑星河月2 小时前
54.螺旋矩阵
java·算法·leetcode·矩阵
Robot_Nav3 小时前
MPPI 局部规划器实验设计讲解
人工智能·算法·mppi
mingo_敏3 小时前
Mean-Teacher 均值教师自训练框架详解
算法·均值算法
星空露珠4 小时前
迷你世界UGc3.0脚本Wiki[剧情动画模块管理接口 Timeline]
开发语言·数据结构·算法·游戏·lua
笨笨没好名字4 小时前
Leetcode刷题python3版第一周(下)
linux·算法·leetcode
jinyishu_4 小时前
常见排序算法详解
数据结构·算法·排序算法
手写码匠4 小时前
手写 LLM 安全护栏:从内容审核到越狱防御的完整实现
人工智能·深度学习·算法·aigc
luj_17684 小时前
草酸与烟酸对消化及糖代谢的影响解析
服务器·c语言·开发语言·经验分享·算法