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)。除了输出数组以外,空间复杂度是常数。
相关推荐
大明者省5 小时前
WSL2 Ubuntu22.04 GPU训练环境配置指南
人工智能·算法·计算机视觉
嘻哈∠※5 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
白狐_7986 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander2587 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
码匠许师傅7 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
Shell运维手记7 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
杨航 AI7 小时前
O(n log n):线性对数原理拆解 这个是排序算法的黄金复杂度之一。
算法·排序算法
船厂电气自动化ai大模型8 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
旖旎夜光8 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
极创信息9 小时前
系统安全隐患全方位排查方案:标准化渗透测试全流程
java·opencv·struts·数据挖掘·eclipse·语音识别·hibernate