当前位置: 首页 > article >正文

【LeetCode HOT100】54. 螺旋矩阵——模拟遍历与边界收缩双解法

题目描述给你一个m行n列的矩阵matrix请按照顺时针螺旋顺序返回矩阵中的所有元素。示例 1text输入matrix [[1,2,3],[4,5,6],[7,8,9]] 输出[1,2,3,6,9,8,7,4,5]示例 2text输入matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出[1,2,3,4,8,12,11,10,9,5,6,7]提示m matrix.lengthn matrix[i].length1 m, n 10-100 matrix[i][j] 100解题思路这道题的核心是模拟顺时针螺旋遍历的过程。常见的有两种思路方向数组模拟行走用一个方向数组控制移动方向遇到边界或已访问格子就转向。边界收缩法推荐维护上下左右四个边界每遍历完一条边就收缩对应边界像剥洋葱一样逐层处理。下面分别讲解这两种方法。解法一方向数组模拟行走思路分析我们可以把整个过程想象成一个人在矩阵中行走起始位置(0, 0)初始方向向右按照右 → 下 → 左 → 上 → 右 …的顺序循环改变方向当下一步会越界或走到已经访问过的格子时就顺时针转向重复直到走完所有格子方向设计用二维数组表示四个方向javaint[][] directions {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 索引0:右 索引1:下 索引2:左 索引3:上用directionIndex表示当前方向索引需要转向时javadirectionIndex (directionIndex 1) % 4; // 0→1→2→3→0代码实现javaclass Solution { public ListInteger spiralOrder(int[][] matrix) { ListInteger order new ArrayList(); if (matrix null || matrix.length 0 || matrix[0].length 0) { return order; } int rows matrix.length, cols matrix[0].length; boolean[][] visited new boolean[rows][cols]; int total rows * cols; int row 0, col 0; int[][] directions {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; int dirIdx 0; // 初始向右 for (int i 0; i total; i) { order.add(matrix[row][col]); visited[row][col] true; // 试探下一步 int nextRow row directions[dirIdx][0]; int nextCol col directions[dirIdx][1]; // 如果下一步越界或已访问就转向 if (nextRow 0 || nextRow rows || nextCol 0 || nextCol cols || visited[nextRow][nextCol]) { dirIdx (dirIdx 1) % 4; } // 移动 row directions[dirIdx][0]; col directions[dirIdx][1]; } return order; } }复杂度分析时间复杂度O(m×n)每个元素访问一次空间复杂度O(m×n)visited 数组的大小解法二边界收缩法推荐思路分析定义四个边界left左边界列索引right右边界列索引top上边界行索引bottom下边界行索引每一轮按顺序遍历四条边从左到右遍历上边界top行从left到right从上到下遍历右边界right列从top1到bottom如果left right且top bottom避免单行/单列重复从右到左遍历下边界bottom行从right-1到left1从下到上遍历左边界left列从bottom到top1收缩边界leftright--topbottom--重复以上步骤直到left right或top bottom。图解示例以 3×3 矩阵为例text初始: left0, right2, top0, bottom2 第1圈 ① → 1 2 3 ② ↓ 6 9 ③ ← 8 ④ ↑ 7 4 收缩: left1, right1, top1, bottom1 第2圈 ① → 5 收缩: left2, right0, top2, bottom0 → 结束代码实现javaclass Solution { public ListInteger spiralOrder(int[][] matrix) { ListInteger order new ArrayList(); if (matrix null || matrix.length 0 || matrix[0].length 0) { return order; } int rows matrix.length, cols matrix[0].length; int left 0, right cols - 1; int top 0, bottom rows - 1; while (left right top bottom) { // 上边界左 → 右 for (int col left; col right; col) { order.add(matrix[top][col]); } // 右边界上 → 下跳过右上角 for (int row top 1; row bottom; row) { order.add(matrix[row][right]); } // 如果不是单行或单列才继续遍历下边界和左边界 if (left right top bottom) { // 下边界右 → 左跳过右下角 for (int col right - 1; col left; col--) { order.add(matrix[bottom][col]); } // 左边界下 → 上跳过左下角和左上角 for (int row bottom; row top; row--) { order.add(matrix[row][left]); } } // 收缩边界 left; right--; top; bottom--; } return order; } }为什么需要if (left right top bottom)考虑两种特殊情况单行矩阵[[1,2,3]]遍历完上边界和右边界后如果继续遍历下边界和左边界会导致重复添加元素。判断条件中的top bottom不成立0 0为 false所以跳过正确。单列矩阵[[1],[2],[3]]left right不成立0 0为 false跳过下边界和左边界正确。复杂度分析时间复杂度O(m×n)每个元素访问一次空间复杂度O(1)只用了常数个额外变量两种解法对比特性方向数组法边界收缩法核心思想模拟行走转向检测剥洋葱收缩边界辅助空间O(m×n) visited数组O(1) 四个变量代码复杂度较简洁但需理解转向逻辑直观清晰适用场景通用通用尤其适合面试推荐边界收缩法更直观空间复杂度更优是面试中的首选写法。总结螺旋矩阵遍历是一道经典的模拟过程题目关键是理清遍历顺序和边界条件。两种方法本质相同都是一圈一圈地处理只是实现方式不同。边界收缩法通过维护四个边界变量避免了额外的 visited 数组更优雅。注意处理单行和单列矩阵的边界情况。相关链接题目链接LeetCode 54. 螺旋

相关文章:

【LeetCode HOT100】54. 螺旋矩阵——模拟遍历与边界收缩双解法

题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: text 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: text 输入&…...

RimSort:终极RimWorld模组管理器使用指南

RimSort:终极RimWorld模组管理器使用指南 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-managed alternat…...

StructBERT文本相似度模型C语言调用指南:轻量级嵌入式集成方案

StructBERT文本相似度模型C语言调用指南:轻量级嵌入式集成方案 如果你正在为嵌入式设备或资源受限的边缘计算场景寻找一个简单可靠的文本相似度解决方案,那么你来对地方了。今天,我们不聊复杂的Python环境部署,也不讲沉重的模型加…...

AI写代码=技术债加速器?3大头部金融科技公司内部评估报告首次流出,仅剩47天窗口期

第一章:智能代码生成代码可维护性评估 2026奇点智能技术大会(https://ml-summit.org) 智能代码生成工具(如Copilot、CodeWhisperer、Tabnine)正深度融入开发工作流,但其输出代码的长期可维护性尚未建立系统化评估机制。可维护性不…...

QQ音乐加密音频解密完全指南:qmcdump让你的音乐重获自由播放权

QQ音乐加密音频解密完全指南:qmcdump让你的音乐重获自由播放权 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump …...

Ostrakon-VL-8B嵌入式设备部署展望:轻量化与边缘计算

Ostrakon-VL-8B嵌入式设备部署展望:轻量化与边缘计算 最近和几个做嵌入式开发的朋友聊天,大家不约而同地提到了同一个问题:现在的大模型能力是强,但动辄几十上百亿的参数,怎么才能塞进资源有限的边缘设备里&#xff1…...

10分钟搞定《Degrees of Lewdity》中文本地化:从零开始到完整汉化体验

10分钟搞定《Degrees of Lewdity》中文本地化:从零开始到完整汉化体验 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Lo…...

互联网产品应用:MogFace-large驱动社交平台智能头像审核

互联网产品应用:MogFace-large驱动社交平台智能头像审核 你有没有想过,每天在社交平台上,成千上万的新用户上传头像时,背后发生了什么?平台怎么确保这些头像里没有违规内容,又怎么判断那张模糊的照片是不是…...

如何快速掌握AO3镜像访问:终极完整指南

如何快速掌握AO3镜像访问:终极完整指南 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 你是否曾经遇到过这样的困境:想要访问全球最大的同人创作平台AO3,却发现页面无法加载&#x…...

NVIDIA Profile Inspector架构深度解析:驱动级性能优化技术揭秘

NVIDIA Profile Inspector架构深度解析:驱动级性能优化技术揭秘 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector作为一款专业的显卡驱动配置工具,通过直…...

无人机 AI 边缘计算实战:Jetson、树莓派与国产盒子部署全解析

上周,一个做电力巡检的朋友给我打电话,语气里满是焦虑:“兄弟,客户要求无人机在野外自动识别绝缘子破损,还必须在机载端实时处理,不能依赖网络。我们试了几个方案,要么延迟太高,要么…...

Windows Cleaner终极指南:告别C盘爆红,让你的Windows电脑重获新生!

Windows Cleaner终极指南:告别C盘爆红,让你的Windows电脑重获新生! 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常…...

视频转PPT效率革命:5分钟完成2小时工作量的智能提取工具

视频转PPT效率革命:5分钟完成2小时工作量的智能提取工具 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾为从教学视频中提取PPT而烦恼?面对2小时的课…...

qmcdump:如何一键解密QQ音乐加密音频文件?

qmcdump:如何一键解密QQ音乐加密音频文件? 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否…...

Oracle tnslsnr口令未设置解决方案

解决方案:使用lsnrctl命令设置监听器密码。步骤如下:1. 停止监听器:lsnrctl stop;2. 设置密码:lsnrctl password [密码];3. 启动监听器:lsnrctl start。这样就修复了口令未设置的问题&#xff0…...

Java Iterator怎么用?

Java Iterator(迭代器) Java 集合框架 Java迭代器(Iterator)是 Java 集合框架中的一种机制,是一种用于遍历集合(如列表、集合和映射等)的接口。 它提供了一种统一的方式来访问集合中的元素&am…...

JavaScript Navigator 对象怎么用?

Window Navigator 对象 JavaScript 中的 navigator 对象用于访问用户浏览器的信息。使用 navigator 对象,你可以获取浏览器版本和名称,并检查浏览器中是否启用了 cookie。 navigator 对象是 window 对象的一个属性。通过只读的 window.navigator 属性可…...

读写锁怎么用?操作系统中Reader Writer Locks实现与应用?

操作系统中的读写者问题是关于管理对共享数据的访问。它允许多个 reader 同时访问数据,但确保同一时间只有一个 writer 可以写入,且在写入过程中不允许任何 reader 读取。 这种方法有助于解决并发编程中的基本问题:为共享资源提供安全的访问…...

MySQL AUDIT_LOG_FORMAT_UNIX_TIMESTAMP_ONLY_WHEN_JSON报错

SET GLOBAL audit_log_format JSON; SET GLOBAL audit_log_policy ALL; FLUSH BINARY LOGS; 这就是远程修复的核心命令,确保在JSON格式下只使用Unix时间戳,避免报错。备份数据后执行:mysql -h host -u user -p -e "SET GLOBAL audit_l…...

PaddleOCR C++推理部署实战:轻量级vs服务器级模型效果对比与性能调优指南

PaddleOCR C推理部署实战:轻量级vs服务器级模型效果对比与性能调优指南 OCR技术在实际业务场景中的应用越来越广泛,而模型的选择和性能调优往往是开发者最关心的问题。本文将带你深入探索PaddleOCR在C环境下的推理部署,重点对比轻量级和服务…...

如何快速解密QQ音乐加密音频:qmcdump完整使用指南

如何快速解密QQ音乐加密音频:qmcdump完整使用指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否曾为…...

从PTA刷题到项目思维:如何把‘查找最贵书籍’功能封装成可复用的C模块?

从PTA刷题到项目思维:如何把‘查找最贵书籍’功能封装成可复用的C模块? 当你第一次在PTA上完成"查找最贵书籍"这道题时,可能只是简单地实现了功能就提交了。但作为一个有追求的C程序员,你应该思考:这段代码…...

NVIDIA Profile Inspector 终极指南:解锁显卡隐藏设置,彻底优化游戏性能

NVIDIA Profile Inspector 终极指南:解锁显卡隐藏设置,彻底优化游戏性能 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector 是一款强大的显卡配置工具&am…...

如何用 Iterator.from 将类数组转化为具备现代方法的迭代器

Iterator.from 不是转换器,它仅将类数组或可迭代对象包装为标准 Iterator 实例,不生成数组,也不支持 map/filter 等方法;需用 Array.from() 或展开语法转为真实数组才能使用这些方法。Iterator.from 是什么,它能直接把…...

如何用Python实现剪映自动化:10倍提升视频剪辑效率的完整指南

如何用Python实现剪映自动化:10倍提升视频剪辑效率的完整指南 【免费下载链接】JianYingApi Third Party JianYing Api. 第三方剪映Api 项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi 还在为重复的视频剪辑工作烦恼吗?每天手动添加水…...

Zotero插件市场架构解析:构建一体化插件管理生态

Zotero插件市场架构解析:构建一体化插件管理生态 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing, installing, and reviewing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons Zotero…...

猫抓浏览器扩展:3分钟掌握网页资源嗅探的终极技巧

猫抓浏览器扩展:3分钟掌握网页资源嗅探的终极技巧 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾想过,那些在线视…...

智能体记忆设计模式:从短期缓存到长期人格的演进之路

智能体记忆设计模式:从短期缓存到长期人格的演进之路 引言 当我们谈论智能体时,我们在谈论什么? 2024年,AI领域最炙手可热的概念无疑是智能体(Agent)。从OpenAI的GPT-4o Assistant、Anthropic的Claude 3 Opus Projects,到Meta的Llama 3 Agents,再到开源社区里如雨后…...

编写程序搭建公益机构财务公开数据展示系统:自动整理收支流水,可视化公示账目,智能核对款项匹配度,提升信任度。

一、实际应用场景描述场景设定:某公益 NGO / 社区基金会 / 志愿者组织:- 资金来源:捐赠、政府拨款、项目资助- 资金去向:物资采购、活动执行、人员补贴- 财务特点:- 笔数不多,但每一笔都要经得起质疑- 公众…...

终极指南:如何用Fiji科学图像分析工具快速完成科研图像处理

终极指南:如何用Fiji科学图像分析工具快速完成科研图像处理 【免费下载链接】fiji A "batteries-included" distribution of ImageJ :battery: 项目地址: https://gitcode.com/gh_mirrors/fi/fiji Fiji科学图像分析工具是科研人员的瑞士军刀&#…...