【矩阵】54. 螺旋矩阵【中等】

螺旋矩阵

  • 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

在这里插入图片描述

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

解题思路

  • 1、模拟顺时针螺旋顺序遍历矩阵的过程。
  • 2、使用四个变量表示当前的上下左右边界,初始化为矩阵的边界。
  • 3、按照顺时针螺旋顺序遍历矩阵,依次沿着上、右、下、左四个方向遍历。
  • 4、每次遍历完成一个方向后,更新对应的边界,并判断是否需要继续遍历。

java实现

public class SpiralMatrix {public static List<Integer> spiralOrder(int[][] matrix) {List<Integer> result = new ArrayList<>();if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return result;}int rows = matrix.length;int cols = matrix[0].length;int top = 0, bottom = rows - 1, left = 0, right = cols - 1;//保证旋转区域是合法的且不会越界。// 如果这两个条件不满足,说明已经遍历完了所有的行或列while (top <= bottom && left <= right) {// 遍历上边界for (int j = left; j <= right; j++) {result.add(matrix[top][j]);}top++;// 遍历右边界for (int i = top; i <= bottom; i++) {result.add(matrix[i][right]);}right--;// 检查是否还有下边界if (top <= bottom) {// 遍历下边界for (int j = right; j >= left; j--) {result.add(matrix[bottom][j]);}bottom--;}// 检查是否还有左边界if (left <= right) {// 遍历左边界for (int i = bottom; i >= top; i--) {result.add(matrix[i][left]);}left++;}}return result;}public static void main(String[] args) {int[][] matrix = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};int[][] test = {{ 1,  2,  3,  4},{ 5,  6,  7,  8},{ 9, 10, 11, 12},{13, 14, 15, 16}};List<Integer> result = spiralOrder(matrix);System.out.println("顺时针螺旋顺序遍历结果: " + result);List<Integer> result2 = spiralOrder(test);System.out.println("顺时针螺旋顺序遍历结果: " + result2);}
}

时间空间复杂度

时间复杂度:O(m * n),其中 m 和 n 分别是矩阵的行数和列数
空间复杂度:O(1),只需要使用常数级别的额外空间

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

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

相关文章

名词【语法笔记】

1.名词分为几大类 2.每一类&#xff0c;又有几个小类&#xff0c;以及所需要注意什么

【每日力扣】131.分割回文串与450.删除二叉搜索树中的节点

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害。 131.分割回文串 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的…

ROS多机通信

在充分的单机学习测试之后&#xff0c;往往要进行真实机器人的测试&#xff0c;那么就要接触到多机通信的问题。ROS采用的分布式网络通信&#xff0c;只要正确的设置ROS_MASTER_URI和ROS_IP两个环境变量&#xff0c;就可以成功实现ROS的多机通信&#xff0c;有时我们也称之为主…

Linux系统——Mysql数据库操作

目录 一、数据库基本操作 1.查看数据库结构 1.1查看数据库信息——Show databases 1.2查看数据库中的表信息——Show tables Show tables in 数据库名 use 数据库名 show tables 1.3显示数据表的结构&#xff08;字段&#xff09;——Describe&#xff08;Desc&#x…

+-x c++

描述 我们有两个整数&#xff1a;A 和 B。 请打印出AB、A−B和AB中最大的数。 输入描述 A B 输出描述 打印 AB、A−B 和 AB 中最大的数字。 用例输入 1 -13 3用例输出 1 -10用例输入 2 1 -33用例输出 2 34用例输入 3 13 3用例输出 3 39提示 样本输出 1 AB…

child_process

Node.js 中的 child_process 模块提供了一系列用于创建和管理子进程的API。这里列出一些常用的API及其使用示例&#xff1a; 1. child_process.exec() 异步执行命令并收集其输出&#xff0c;适合简单命令。 const { exec } require(child_process);exec(ls -l, (error, std…

HarmonyOS(鸿蒙)ArkUI组件

方舟开发框架&#xff08;简称ArkUI&#xff09;为HarmonyOS应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实时界面预览工具等&#xff0c;可以支持开发者进行可视化界面…

8.【Linux】线程

进程与线程比较 具体参考 小林coding 线程的上下文切换 当两个线程是属于同一个进程&#xff0c;因为虚拟内存是共享的&#xff0c;所以在切换时&#xff0c;虚拟内存这些资源就保持不动&#xff0c;只需要切换线程的栈、寄存器等不共享的数据。 当两个线程不属于同一个进程&…

iOS常见崩溃简介

1. 崩溃 多指在移动设备&#xff08;如iOS、Android设备&#xff09;中或不可移动设备&#xff08;如:Windows、Linux等设备&#xff09;&#xff0c; 在打开或使用应用程序时出现的突然退出中断的情况&#xff08;类似于Windows的应用程序崩溃&#xff09;。 多表现为&#…

网络原理(3)——TCP协议

目录 一、连接管理 二、三次握手 1、何为三次握手&#xff1f; 2、三次握手有何意义&#xff1f; 三、四次挥手 三次握手和四次挥手的相似之处和不同之处 &#xff08;1&#xff09;相似之处 &#xff08;2&#xff09;不同之处 四、TCP的状态 建立连接&#xff1a; 断开…

linux系统中的PS命令详解

ps是一个常用的Linux/Unix命令&#xff0c;用于显示当前系统中的进程信息。它可以列出系统中正在运行的进程&#xff0c;并显示每个进程的详细信息&#xff0c;包括进程的PID&#xff08;进程ID&#xff09;、PPID&#xff08;父进程ID&#xff09;、CPU使用率、内存使用率、命…

【链表】算法例题

目录 八、 链表 57. 环形链表 ① 58. 两数相加 ② √ 59. 合并两个有序链表 ① √- 60. 随机链表的复制 ② 61. 反转链表II ② 62. K个一组翻转链表 ③ 63. 删除链表的倒数第N个结点 ② √- 64. 删除排序链表中的重复元素II ② √- 65. 旋转链表 ② √- 66. 分隔链…

MySQL 数据库的备份和还原

1.命令行 备份语法 mysqldump -u用户名 -p密码 数据库名称 > 保存的路径还原语法 1.登陆数据库 2.创建数据库 3.使用数据库 4.执行文件 source 文件路径2.图形化(太简单了不写了) 点击返回 MySQL 快速学习目录

全球首位AI程序员诞生,将会对程序员的影响有多大?

近期&#xff0c;全球首位AI程序员Devin的出场&#xff0c;不禁让我想到了一个有趣的问题&#xff1a;AI程序员会不会抢程序员的饭碗呢&#xff1f;先别着急下结论&#xff01;虽然AI技术在编程领域越来越广泛&#xff0c;但它真的能完全替代我们程序员吗&#xff1f; 方向一&…

【中级软件设计师】上午题07-面向对象技术(通俗易懂版)

上午题07-面向对象技术 1 类2 对象和消息2.1 对象2.2 消息 3 方法重载4 封装5 继承6 多态7 静态、动态绑定8 面向对象设计原则9 面向对象分析与设计9.1 面向对象分析9.2 面向对象设计9.3 面向对象测试 1 类 实体、接口、控制 类是在对象之上的抽象&#xff0c;对象是类的具体…

安科瑞精密配电柜助力数据中心节能降耗

彭姝麟 Acrelpsl 1.趋势分析 能源支出作为数据中心运营的主要成本之一。清华大学能源互联网创新研究院常务副院长高文胜曾在公开场合指出&#xff0c;随着我国数据中心能源消耗的逐年攀升&#xff0c;电费支出约占数据中心年运营成本的95%。加之“双碳”战略的出台&#xff0c…

markdown支持的emoji表情

markdown-emoji Markdown语法支持添加 emoji 表情&#xff0c;输入不同的符号码&#xff08;两个冒号包围的字符&#xff09;可以显示出不同的表情 Emoji Cheat Sheet全列表参见&#xff1a;Emoji Cheat Sheet markdown-emoji 人物自然事物地点符号 人物 :bowtie: :bowtie…

ActiViz三维场景的基本要素——灯光

文章目录 一、ActiViz 中灯光的基本要素二、ActiViz 中灯光的使用方法三、ActiViz 中灯光的高级特性四、性能优化和注意事项五、总结一、ActiViz 中灯光的基本要素 灯光是在三维场景中模拟光照效果的重要组成部分。在 ActiViz 中,灯光具有多种类型和属性,可以通过设置这些属…

字符串(string)篇(一)

文章目录 1.1 capitalize()函数1.2 casefold()函数1.3 center()函数1.4 count()函数1.5 decode()函数1.6 encode()函数1.7 endswith()函数1.8 expandtabs()函数1.9 find()函数 1.1 capitalize()函数 在Python中&#xff0c;capitalize() 是一个字符串&#xff08;string&#…

SkyWalking上报Java应用数据

重要 本文中含有需要您注意的重要提示信息&#xff0c;忽略该信息可能对您的业务造成影响&#xff0c;请务必仔细阅读。 通过SkyWalking为应用埋点并上报链路数据至可观测链路 OpenTelemetry 版后&#xff0c;可观测链路 OpenTelemetry 版即可开始监控应用&#xff0c;您可以…