Leetcode 54. 螺旋矩阵

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

示例 1:
在这里插入图片描述
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:
在这里插入图片描述
输入: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.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100

思路:
根据题目示例 matrix = [[1,2,3],[4,5,6],[7,8,9]] 的对应输出 [1,2,3,6,9,8,7,4,5] 可以发现,顺时针打印矩阵的顺序是 “从左向右、从上向下、从右向左、从下向上” 循环。

因此,考虑设定矩阵的 “左、右、上、下” 四个边界,模拟以上矩阵遍历顺序。

算法流程:
空值处理: 当 matrix 为空时,直接返回空列表 [] 即可。
初始化: 矩阵 左、右、上、下 四个边界 l , r , t , b ,用于打印的结果列表 res 。
循环打印: “从左向右、从上向下、从右向左、从下向上” 四个方向循环打印。
根据边界打印,即将元素按顺序添加至列表 res 尾部。
边界向内收缩 1 (代表已被打印)。
判断边界是否相遇(是否打印完毕),若打印完毕则跳出。
返回值: 返回 res 即可。

python:

class Solution:def spiralOrder(self, matrix: List[List[int]]) -> List[int]:if not matrix:return []l,r,t,b,res=0,len(matrix[0])-1,0,len(matrix)-1,[]while True:# 左到右,固定上for i in range(l,r+1):res.append(matrix[t][i])t+=1if t>b:break# 上到下,固定右for i in range(t,b+1):res.append(matrix[i][r])r-=1if l>r:break# 右到左,固定下for i in range(r,l-1,-1):res.append(matrix[b][i])b-=1if t>b:break# 下到上,固定左for i in range(b,t-1,-1):res.append(matrix[i][l])l+=1if l>r:breakreturn res

复杂度分析:
时间复杂度 O(MN) : M,N分别为矩阵行数和列数。
空间复杂度 O(1): 四个边界 l , r , t , b 使用常数大小的额外空间。

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

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

相关文章

Anaconda下载安装及配置pytorch环境

先解释一下Python、Anaconda、Pytorch是啥 Python是一种广泛使用的编程语言&#xff0c;在许多领域都有应用。它具有简洁的语法&#xff0c;易于学习&#xff0c;并且有大量的第三方库可以使用。 Anaconda是一个Python的包和环境管理软件&#xff0c;提供了许多用于数据科学&a…

c语言:操作符详解(上)

目录 一、操作符的分类二、二进制和进制转换1.2进制转10进制2.10进制转2进制3.2进制转8进制4.2进制转16进制 三、原码、反码、补码四、算术操作符、-、*、/、%1.**和-**2.*3./4.% 五、移位操作符1.左移操作符2.右移操作符 六、位操作符&#xff1a;&、|、^、~七、赋值操作符…

Python中random模块:随机数生成与应用

random模块介绍 随机数在计算机编程中扮演着重要的角色&#xff0c;它们被广泛应用于游戏开发、密码生成、仿真等众多领域。 Python提供了丰富而强大的random模块&#xff0c;旨在方便开发者生成高质量的随机数&#xff0c;随机选择和操作数据。 本文将介绍Python中random模…

Gemini 初体验

1 使用体验 同样需要科学上网。速度很快&#xff0c;而且还不要钱&#xff0c;据说使用太多可能被限流。对于小语种翻译效果比 GPT-4 好&#xff0c;其它还没测试。可通过 ChatBox 界面调用&#xff0c;也可使用 Python 调用。 2 使用 ChatBox 方式调用 在 build with gemin…

java 环境配置(保姆级最新版)

&#x1f600;前言 ps 因为网络上教程太多太杂所以干脆直接自己出个教程方便自己复习也希望帮助到大家 文章目录 第一查看自己电脑的系统类型第二 jdk下载历史jdk下载 第三 jdk安装第四 环境搭配Java_Home 配置Path 配置CLASSPATH 配置 检测是否配置成功 第一查看自己电脑的系统…

【牛客】VL68 同步FIFO

描述 请设计带有空满信号的同步FIFO&#xff0c;FIFO的深度和宽度可配置。双口RAM的参考代码和接口信号已给出&#xff0c;请在答案中添加并例化此部分代码。 电路的接口如下图所示。端口说明如下表。 接口电路图如下&#xff1a; 双口RAM端口说明&#xff1a; 端口名I/O描述…

基于鹦鹉优化算法(Parrot optimizer,PO)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

HTML列表标签

文章目录 1. 无序列表2. 有序列表3. 自定义列表4. 标签分类4.1. 块级元素4.2. 行内元素4.3. 使用规则 1. 无序列表 ul 和 li 标签可以生成一个列表&#xff0c;也叫无序列表。 type 属性取值&#xff1a; disc 实心圆(默认值)circle 空心圆square 实心方块 我们来演示一下&…

寻寻觅觅,“老外记者”躲在哪里?

2024年2月27日发布的《新华社权威快报丨2024年全国两会新闻中心27日启用》称&#xff0c;目前已有3000多名中外记者报名采访全国两会&#xff0c;其中境内记者2000多名&#xff0c;港澳台记者和外国记者1000多名&#xff0c;中外记者报名数量较近几年有明显增长&#xff0c;两会…

夏目友人帐 唤石者与怪异的访客 2021.01.16

夏目友人帐 唤石者与怪异的访客 2021.01.16 1 唤石者 | 石起こし2 怪异的访客 | 怪しき来訪者 1 唤石者 | 石起こし 夏目在森林中邂逅小妖怪 ミツミ。据说它担任着把神祗的妖怪岩铁大人从沉睡中唤醒的「唤石」的职责。但是为了奖赏的美酒&#xff0c;猫老师和妖怪们开始策划夺取…

【原创教程】S7-1200配方程序编写方法

1 绪论 1.1 本文的目的 在生产中我们的一台设备往往需要 对应很多种不同工艺或不同尺寸的设备,这就要求我们设备的参数需要经常变化。我们将每一种产品对应的参数保存起来,下一次再生产同种产品时可以迅速一键调用,而不是一个一个的去设置,这种功能就叫做配方(Recipe)。…

ISP基础概述

原文来自ISP 和摄像头基本知识 本文主要介绍ISP&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花 &#x1f3…