54.螺旋矩阵

题目描述

题目描述

题解(按层模拟,边界收缩法)

思路

边界收缩法思路

代码

java 复制代码
import java.util.ArrayList;
import java.util.List;

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> result = new ArrayList<>();
        // 处理边界条件:空矩阵直接返回
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return result;
        }

        // 定义四个方向的边界
        int top = 0;
        int bottom = matrix.length - 1;
        int left = 0;
        int right = matrix[0].length - 1;

        while (true) {
            // 1. 向右移动:遍历 top 层,从 left 到 right
            for (int i = left; i <= right; i++) {
                result.add(matrix[top][i]);
            }
            top++; // top 层遍历完,上边界下移
            if (top > bottom) break; // 若越界说明全部遍历完了

            // 2. 向下移动:遍历 right 列,从 top 到 bottom
            for (int i = top; i <= bottom; i++) {
                result.add(matrix[i][right]);
            }
            right--; // right 列遍历完,右边界左移
            if (left > right) break;

            // 3. 向左移动:遍历 bottom 层,从 right 到 left
            for (int i = right; i >= left; i--) {
                result.add(matrix[bottom][i]);
            }
            bottom--; // bottom 层遍历完,下边界上移
            if (top > bottom) break;

            // 4. 向上移动:遍历 left 列,从 bottom 到 top
            for (int i = bottom; i >= top; i--) {
                result.add(matrix[i][left]);
            }
            left++; // left 列遍历完,左边界右移
            if (left > right) break;
        }

        return result;
    }
}

复杂度分析

  • 时间复杂度:O(mn),其中 m 和 n 分别是输入矩阵的行数和列数。
  • 空间复杂度:O(1)。除了输出数组以外,空间复杂度是常数。
相关推荐
Rain的Java大神之路1 分钟前
10 万人抢 2000 个座位,电影票选座系统怎么防超卖?一文讲透大厂高频场景题
java·后端·面试
闻缺陷则喜何志丹4 分钟前
详细设计说明书的内容要求
算法·测试·存储
砚底藏山河7 分钟前
量化新手误区:因子计算与行情数据的工程化解耦
java·数据库·python·金融
和裕9 分钟前
定制纸箱刀卡、平卡、隔档分别是什么?结构与适用场景区别全解析
大数据·运维·网络·人工智能·算法
威哥爱编程9 分钟前
【AI全栈12-07】Spring Boot 用 Agent 自动完成多步运营任务
java·spring boot·后端
未秃头的程序猿13 分钟前
我用 Spring AI + MCP 把公司内部系统接给了 AI,过程没想象中顺利
java·后端
m0_5873830026 分钟前
碰碰好评卡功能落地实战 从需求梳理到上线部署全流程实操指南
java·linux·服务器·前端·javascript·vue.js·人工智能
Tisfy32 分钟前
LeetCode 3723.数位平方和的最大值:构造
数学·算法·leetcode·字符串·题解
hetao173383738 分钟前
联盟场-提高组-R4 & ZYZSC-S-Round 7
c++·算法
诚心呈意共享外卖配送系统42 分钟前
多平台订单聚合系统的技术架构:接 API 只是开始
java·开发语言·架构·系统架构·创业创新