在解决螺旋矩阵问题时,我们需要按照顺时针螺旋顺序遍历矩阵,并返回所有元素。本文将分享两种高效的解决方案:边界收缩法和方向模拟法。

题目描述

边界收缩法

边界收缩法通过定义四个边界(上、下、左、右)来模拟螺旋遍历的过程。每完成一个方向的遍历,就收缩对应的边界,直到所有元素被访问完毕。

算法思路
  1. 初始化边界top = 0bottom = m-1(行数-1), left = 0right = n-1(列数-1)。
  2. 按层遍历
    • 向右:遍历上边界(top行),从 left 到 right
    • 向下:遍历右边界(right列),从 top+1 到 bottom
    • 向左:遍历下边界(bottom行),从 right-1 到 left+1(需确保存在内层)。
    • 向上:遍历左边界(left列),从 bottom 到 top+1(需确保存在内层)。
  3. 收缩边界:完成一圈后,将 top++bottom--left++right--
  4. 终止条件:当边界交错时停止(top > bottom 或 left > right)。
代码实现
class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> result=new ArrayList<Integer>();int x= matrix.length;int y=matrix[0].length;int left=0;int right=y-1;int top=0;int bottom=x-1;while(left<=right&&top<=bottom){for(int i=left;i<=right;i++){result.add(matrix[top][i]);}for(int i=top+1;i<=bottom;i++){result.add(matrix[i][right]);}if(left<right&&top<bottom) {for (int i = right - 1; i > left; i--) {result.add(matrix[bottom][i]);}for (int i = bottom; i > top; i--) {result.add(matrix[i][left]);}}left++;right--;top++;bottom--;}return result;}
}

复杂度分析
  • 时间复杂度:O(m*n),每个元素被访问一次。
  • 空间复杂度:O(1),仅使用常量额外空间(结果列表不计入)。

方向模拟法(其他解决方案)

方向模拟法通过定义方向数组和记录访问状态来模拟螺旋路径,适合对边界条件处理不熟悉的情况。

算法思路
  1. 初始化
    • 方向数组 dirs 表示右、下、左、上四个方向。
    • 访问矩阵 visited 记录元素是否被访问。
    • 从 (0,0) 开始,初始方向为右。
  2. 遍历矩阵
    • 将当前元素加入结果列表,并标记为已访问。
    • 计算下一个位置,若越界或已访问,则顺时针转向。
    • 更新位置并继续遍历,直到所有元素被访问。
代码实现
class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> result = new ArrayList<>();if (matrix == null || matrix.length == 0) return result;int m = matrix.length, n = matrix[0].length;boolean[][] visited = new boolean[m][n];int[][] dirs = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 右、下、左、上int r = 0, c = 0, d = 0;int total = m * n;for (int i = 0; i < total; i++) {result.add(matrix[r][c]);visited[r][c] = true;// 计算下一个位置int nr = r + dirs[d][0];int nc = c + dirs[d][1];// 若越界或已访问,则转向if (nr < 0 || nr >= m || nc < 0 || nc >= n || visited[nr][nc]) {d = (d + 1) % 4; // 顺时针转向nr = r + dirs[d][0];nc = c + dirs[d][1];}r = nr;c = nc;}return result;}
}

复杂度分析
  • 时间复杂度:O(m*n),每个元素访问一次。
  • 空间复杂度:O(m*n),visited 矩阵额外占用空间。

总结

  • 边界收缩法:通过动态调整边界模拟螺旋路径,无需额外空间,是更优解。
  • 方向模拟法:直观易理解,但需要额外空间记录访问状态,适合快速实现。

两种方法均能高效解决螺旋矩阵问题,实际应用中推荐优先使用边界收缩法!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95492.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95492.shtml
英文地址,请注明出处:http://en.pswp.cn/web/95492.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[嵌入式embed][Qt]Qt5.12+Opencv4.x+Cmake4.x_用Qt编译linux-Opencv库 测试

[嵌入式embed][Qt]Qt5.12Opencv4.xCmake4.x_用Qt编译linux-Opencv库 & 测试前文:准备环境安装qt-opencv必备库git-clone opencv库编译opencv库特殊:opencv编译的include,编译出来后多嵌套了一层文件夹,手工处理下改为include/opencv2测试demo新建项目QOpencv3.promain.cpp百…

百度智能云「智能集锦」自动生成短剧解说,三步实现专业级素材生产

备受剪辑压力困扰的各位自媒体老板、MCN 同学们、投放平台大佬们&#xff0c;解放双手和大脑的好机会它来了&#xff01; 在这个数字化飞速发展的时代&#xff0c;智能技术正以前所未有的速度改变着我们的生活与工作方式。百度智能云&#xff0c;作为智能科技的引领者&#xf…

FPGA笔试面试常考问题及答案汇总

经历了无数的笔试面试之后&#xff0c;不知道大家有没有发现FPGA的笔试面试还是有很多共通之处和规律可循的。所以一定要掌握笔试面试常考的问题。FPGA设计方向&#xff08;部分题目&#xff09;1. 什么是同步逻辑和异步逻辑&#xff1f;同步逻辑 是指在同一个时钟信号的控制下…

从0开始的github学生认证并使用copilot教程(超详细!)

目录 一.注册github账号 1.1、仅仅是注册 1.2、完善你的profile 二、Github 学生认证 邮箱 学校名称 How do you plan to use Github? Upload Proof 学校具体信息 一.注册github账号 1.1、仅仅是注册 1.用如QQ邮箱的第三方邮箱注册github 再添加.edu结尾的教育邮箱&…

自动驾驶叉车与 WMS 集成技术方案:数据交互、协议适配与系统对接实现

自动驾驶叉车与仓库管理系统&#xff08;WMS&#xff09;是现代物流自动化的核心。当这两项技术协同工作时&#xff0c;仓库将实现前所未有的效率、准确性和可扩展性。以下是利用其集成实现最佳效果的方法。 为何集成至关重要 仓库管理在当今运营中扮演着至关重要的角色&…

“企业版维基百科”Confluence

“企业版维基百科”Confluence Confluence 是一款由澳大利亚公司 Atlassian 开发的企业级团队协作与知识管理软件。您可以把它理解为一个功能非常强大的 “企业版维基百科” 或 “团队知识库”。 它的核心目标是帮助团队在一个统一的平台上创建、共享、组织和讨论项目文档、会议…

QT去除显示的红色和黄色下划线的办法

在使用 Qt Creator 开发项目时,有时候会遇到这样的情况: 代码明明没有错误,但编辑器里却出现了红色或黄色的下划线提示,甚至让人误以为代码有问题。其实,这通常是 Qt Creator 的代码模型没有及时更新 导致的,而不是项目本身的错误。 为什么会出现红色和黄色下划线? 红…

域内的权限提升

CVE-2020-1472域内有一个服务&#xff1a;MS-NRPC&#xff08;建立与域控安全通道&#xff09;&#xff0c;可利用此漏洞获取域管访问权限。检测这个漏洞能不能打&#xff0c;能打之后&#xff0c;将域控的机器hash置空&#xff0c;密码为空&#xff0c;那么你就可以通过空的ha…

一键掌握服务器健康状态与安全风险

一键掌握服务器健康状态与安全风险 在服务器运维工作中,定期对系统进行全面检查是保障服务稳定运行的关键环节。手动检查不仅耗时费力,还容易遗漏关键指标。今天我将为大家介绍一款功能全面的系统综合巡检工具,只需一键运行,即可完成系统状态、性能、安全等多维度检查,并…

线性代数第一讲—向量组

文章目录考纲术语向量组的线性表示与线性相关判别线性相关性的七大定理极大线性无关组、等价向量组、向量组的秩等价矩阵和等价向量组向量空间基本概念基变换、坐标变换 考纲术语 n维向量n维行向量n维列向量分量向量相等向量的加法向量的数乘向量的内积正交向量的模单位向量标准…

涉私数据安全与可控匿名化利用机制研究(下)

文章目录前言三、可信数据空间支撑可控匿名化机制&#xff08;一&#xff09;基于政府可信根的可控匿名化&#xff08;二&#xff09;可信数据空间“中国模式”保障数据全生命周期合规可控&#xff08;三&#xff09;可控匿名化对大模型数据可逆风险的防御机制前言 尽管《个人…

More Effective C++ 条款25:将构造函数和非成员函数虚拟化

More Effective C 条款25&#xff1a;将构造函数和非成员函数虚拟化核心思想&#xff1a;通过虚拟构造函数和非成员函数&#xff0c;实现运行时的多态行为&#xff0c;允许在不知道对象具体类型的情况下创建新对象或执行操作&#xff0c;增强代码的灵活性和扩展性。 &#x1f6…

血缘元数据采集开放标准:OpenLineage Guides 在 Airflow 中使用 OpenLineage Proxy

OpenLineage 是一个用于元数据和血缘采集的开放标准&#xff0c;专为在作业运行时动态采集数据而设计。它通过统一的命名策略定义了由作业&#xff08;Job&#xff09;、运行实例&#xff08;Run&#xff09;和数据集&#xff08;Dataset&#xff09; 组成的通用模型&#xff0…

【Linux】网络(中)

目录1. 序列化和反序列化1.1 序列化1.2 反序列化2. 网络版本计算器&#xff08;自定义协议&#xff09;3. 再次理解OSI七层模型4. HTTP协议4.1 HTTP协议格式4.2 HTTP的方法4.3 HTTP的状态码4.4 HTTP常见Header4.5 长连接和短连接4.6 Cookie5. HTTPS协议5.1 对称加密和非对称加密…

AI 写作实战:用 GPT-4o+ Claude 3 生成小红书文案,转化率提升 30%

引言・AI 写作开启小红书营销新引擎在社交媒体营销的浪潮中&#xff0c;小红书以其独特的社区氛围和庞大的年轻用户群体&#xff0c;成为品牌推广的关键阵地。然而&#xff0c;撰写既吸引眼球又能高效转化的文案并非易事&#xff0c;传统人工编写不仅耗时费力&#xff0c;还难以…

一个月涨粉30万,Coze智能体一键生成民间传说爆款视频,3分钟上手

最近发现一个账号&#xff0c;用AI将民间传说故事转化为生动视频&#xff0c;短短一个月涨粉30万&#xff0c;条均播放 量破百万。这种视频制作真的需要专业团队吗&#xff1f;今天教大家用Coze智能体工作流&#xff0c;一键生成 爆款民间故事视频&#xff01;工作流功能 用Coz…

Linux arm64 PTE contiguous bit

文章目录一、简介1.1 contiguous PTE1.2 demo二、Linux 内核中的实现2.1 宏定义2.2 __create_pgd_mapping2.2.1 alloc_init_cont_pmdinit_pmd2.2.2 alloc_init_cont_pteinit_pte2.3 hugetlbpage2.3.1 find_num_contig2.3.2 num_contig_ptes2.3.3 huge_pte_offset2.3.4 huge_pte…

深入分析 json2(新)与标准的 jsonrpc的区别

这两个模块都用于实现 JSON 风格的远程过程调用&#xff08;RPC&#xff09;接口&#xff0c;但设计哲学、使用方式、安全性和现代化程度有显著差异。 &#x1f4c2; 对比背景 文件 功能 来源 jsonrpc.py 标准的 JSON-RPC 2.0 兼容接口 Odoo 内核已有逻辑 json2.py 自定…

IO_HW_9_3

一、使用消息队列实现两个程序间的相互通信二、思维导图三、牛客网

fastlio配置与过程中遇到的问题

&#x1f680; Fast-LIO 安装与运行指南 我之前已经创建并使用原有的工作空间 catkin_ws,如果没有创建一个。 使用环境 ubantu20.04 ros1 noetic版本 我作的是要在已有的 ~/catkin_ws 中编译 原版 FAST-LIO&#xff08;来自 HKU-MARS 官方仓库&#xff09;。 最终下载官方文档中…