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

LeetCode螺旋矩阵

快一个月没刷题了,最近工作有些忙,今天闲下来两小时,刷一道

题目描述

给你一个 mn 列的矩阵 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]

解题思路

控制上下边界、左右边界。每一次循环走一圈,走完一圈上下左右边界往内部压缩。结束条件是left>right top>bottom

  • 首先初始化上边界为第0行,下边界为最后一行,左边界是第0列,右边界是最后一列。可以看出边界就是要加到res(返回数组)的一圈。
  • 接下来一个循环,条件是true(无限循环),虽然终止条件是left>right top>bottom,但是在走一圈的过程中就可能会触发终止条件,而不是一圈结束了才会触发终止条件。因此在遍历四个时,每遍历一个边就判断一次终止条件

代码

var spiralOrder = function(matrix) {let left = 0; // 初始化左边界为第0列let right = matrix[0].length-1; // 初始化右边界为最后一列let top = 0; // 初始化上边界为第0行let bottom = matrix.length-1; // 初始化下边界为最后一行let res = []; // 初始化结果数组,用于存储最终的螺旋顺序元素while(true){ // 开始一个无限循环for(let i=left;i<=right;i++){ // 从左到右遍历第一行res.push(matrix[top][i]); // 将第一行的元素添加到结果数组}top++; // 遍历完第一行后,上边界下移if(top>bottom)break; // 如果上边界超过了下边界,结束循环for(let i=top;i<=bottom;i++){ // 从上到下遍历最后一列res.push(matrix[i][right]); // 将最后一列的元素添加到结果数组}right--; // 遍历完最后一列后,右边界左移if(right<left)break; // 如果右边界小于左边界,结束循环for(let i=right;i>=left;i--){ // 从右到左遍历最后一行res.push(matrix[bottom][i]); // 将最后一行的元素添加到结果数组}bottom--; // 遍历完最后一行后,下边界上移if(bottom<top) break; // 如果下边界小于上边界,结束循环for(let i=bottom;i>=top;i--){ // 从下到上遍历第一列res.push(matrix[i][left]); // 将第一列的元素添加到结果数组}left++; // 遍历完第一列后,左边界右移if(left>right) break; // 如果左边界超过了右边界,结束循环}return res; // 返回结果数组
};

案例分析

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

逐步分析:

  1. 初始化边界:

    • left = 0
    • right = 2
    • top = 0
    • bottom = 2
  2. 第一次循环:

    • 从左到右遍历第一行(top行):[1, 2, 3] 添加到 res
      • res = [1, 2, 3]
    • top++top = 1
    • 检查边界:top <= bottom1 <= 2),继续。
  3. 第二次循环:

    • 从上到下遍历最后一列(right列):[6, 9] 添加到 res
      • res = [1, 2, 3, 6, 9]
    • right--right = 1
    • 检查边界:right >= left1 >= 0),继续。
  4. 第三次循环:

    • 从右到左遍历最后一行(bottom行):[8, 7] 添加到 res
      • res = [1, 2, 3, 6, 9, 8, 7]
    • bottom--bottom = 1
    • 检查边界:bottom >= top1 >= 1),继续。
  5. 第四次循环:

    • 从下到上遍历第一列(left列):[4] 添加到 res
      • res = [1, 2, 3, 6, 9, 8, 7, 4]
    • left++left = 1
    • 检查边界:left <= right1 <= 1),继续。
  6. 第五次循环:

    • 从左到右遍历第二行(top行):[5] 添加到 res
      • res = [1, 2, 3, 6, 9, 8, 7, 4, 5]
    • top++top = 2
    • 检查边界:top > bottom2 > 1),循环结束。

结论:
循环在第五次遍历后结束,因为此时 top > bottom 的条件满足。因此,最终结果数组 res[1, 2, 3, 6, 9, 8, 7, 4, 5]

相关文章:

LeetCode螺旋矩阵

快一个月没刷题了&#xff0c;最近工作有些忙&#xff0c;今天闲下来两小时&#xff0c;刷一道 题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4…...

第十五届蓝桥杯JAVA的B组题目详情解析

(第一个填空太简单&#xff0c;就不写了,根本不用代码&#xff0c;直接excel计算) 目录 蓝桥杯第二个填空&#xff0c;类斐波那契循环数 蓝桥杯JAVA.b组第三题 -分布式队列(模拟) 食堂(蓝桥杯D题) ​编辑 星际旅行(Floyd佛洛依德) 其余的有点变态&#xff0c;感觉学了好像…...

在几分钟内将数据从 Oracle 迁移到 ClickHouse

ClickHouse 是一个开源的面向列的数据库管理系统。它在实时数据处理方面的出色性能显着增强了数据分析和业务洞察力。将数据从 Oracle 迁移到 ClickHouse 可以释放数据在决策中的力量&#xff0c;这是单独使用 Oracle 无法实现的。 本教程介绍如何使用 BladePipe 将数据从 Orac…...

ASP.NET MVC宠物商城系统

该系统采用B/S架构&#xff0c;使用C#编程语言进行开发&#xff0c;以ASP.NET MVC框架为基础&#xff0c;以Visual Studio 2019为开发工具&#xff0c;数据库采用SQL Server进行保存数据。系统主要功能包括登录注册、宠物展示、个人中心、我的订单、购物车、用户管理、宠物类别…...

完整http服务器

目录 背景目标描述技术特点开发环境WWW客户端浏览发展史服务端http发展史http分层概览 背景 http协议被广泛使用&#xff0c;从移动端&#xff0c;pc浏览器&#xff0c;http无疑是打开互联网应用窗口的重要协议&#xff0c;http在网络应用层中的地位不可撼动&#xff0c;是能…...

【专题】2024AIGC创新应用洞察报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p38310 在科技日新月异的今天&#xff0c;人工智能领域正以前所未有的速度发展&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;成为其中最耀眼的明珠。从其应用场景的不断拓展&#xff0c;到对各行业的深刻变革&#xff0…...

形态学图像处理(Morphological Image Processing)

形态学图像处理(Morphological Image Processing) 前言 ‍ 本博客为个人总结数字图像处理一课所写&#xff0c;并给出适当的扩展和相应的demo。 写博客跟做 checkpoint​ 很像&#xff0c;毕竟个人还不能达到那种信手拈来的境界&#xff0c;忘了就是从零开始训练&#xff0…...

【IDER、PyCharm】免费AI编程工具完整教程:ChatGPT Free - Support Key call AI GPT-o1 Claude3.5

文章目录 CodeMoss 简介CodeMoss 的模型集成如何安装和配置 CodeMossIDER 插件安装步骤 CodeMoss 的实战使用AI 问答功能代码优化与解释优化这段代码解释这段代码 文件上传与对话联网查询与 GPT 助手联网查询GPT 助手 提升开发效率的最佳实践结语更多文献 CodeMoss 简介 CodeM…...

C++11的一些实用特性

1.统一的列表初始化 在C98中&#xff0c;标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 //统一的列表初始化 struct Date {int year;int month;int day; };void test1() {Date d1 { 2024,11,14 };int array1[] { 1, 2, 3, 4, 5 };int array2[5] { …...

23种设计模式-观察者(Observer)设计模式

文章目录 一.什么是观察者模式&#xff1f;二.观察者模式的结构三.观察者模式的应用场景四.观察者模式的优缺点五.观察者模式的实现&#xff08;C示例&#xff09;六.观察者模式的实现&#xff08;JAVA示例&#xff09;七.代码解释八.总结 类图&#xff1a; 观察者设计模式类图…...

【CUDA】Branch Divergence and Unrolling Loop

目录 一、避免分支发散 1.1 并行规约问题 1.2 并行规约中的发散 二、UNrolling Loops 一、避免分支发散 控制流有时依赖于 thread 索引。同一个warp中&#xff0c;一个条件分支可能导致性能很差。通过重新组织数据获取模式可以减少或避免 warp divergence。具体问题查看下…...

深度学习:卷积神经网络的计算复杂度,顺序操作,最大路径长度

卷积层的计算复杂度 在深度学习中&#xff0c;卷积层的计算复杂度主要取决于卷积核的大小、输入和输出的通道数量、以及输入序列的长度。具体来说&#xff0c;卷积层的计算复杂度可以通过以下几个因素来计算&#xff1a; 卷积核大小 k&#xff1a;卷积核的大小决定了每次卷积操…...

springboot 配置文件中 multipart.max-file-size 各个版本的写法

由于springboot具有几个版本&#xff0c;不同版本对于文件上传最大限制的配置也有所不同。 所以要注意springboot本身的版本&#xff0c;不然会一直报错 在springboot1.3版本中&#xff1a; multipart.maxFileSize在springboot1.4与springboot1.5版本中&#xff1a; spring…...

linux 中mysql查看慢日志

1、到mysql容器&#xff0c;先登录到数据库&#xff0c;查看是否开启 mysql -h 127.0.0.1 -uroot -p SHOW VARIABLES LIKE slow_query_log; 2、如果没有开启&#xff0c;需要先开启 set global slow_query_log ON; 3、查看慢日志文件 SHOW VARIABLES LIKE slow_query_log…...

单片机的基本组成与工作原理

单片机&#xff08;Microcontroller Unit, MCU&#xff09;是一种将计算机的主要部分集成在一个芯片上的小型计算机系统。它通常包括中央处理器&#xff08;CPU&#xff09;、存储器&#xff08;Memory&#xff09;、输入输出接口&#xff08;I/O Ports&#xff09;、定时器/计…...

智慧隧道和智慧交通

通过引入先进的物联网技术&#xff0c;将各种硬件设备如传感器、摄像头、控制系统等有效地连接并管理起来&#xff0c;以实现道路安全和交通流畅的目标。这些设备将能够实时监控和控制隧道内的各种设备和系统&#xff0c;从而提高道路安全、提升驾驶体验并降低管理成本。 在这个…...

List、Set、Map详解和区别

在 Java 中&#xff0c;List、Set、Map是常用的集合类型&#xff0c;它们各自具有不同的特点和用途&#xff0c;以下是对它们的详细介绍及区别分析&#xff1a; List&#xff08;列表&#xff09; 特点&#xff1a; 有序性&#xff1a;List中的元素是有序的&#xff0c;即元素…...

界面控件DevExpress WinForms v24.2新功能预览 - 支持.NET 9

DevExpress WinForms 拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…...

Postman之pm.test断言操作

Postman之pm.test断言操作 1.断言方法2.连接符3.条件判断符 用于验证请求的响应数据是否符合预期 1.断言方法 pm.test()&#xff1a;定义一个测试函数&#xff0c;接受两个参数&#xff0c;一个字符串参数用来描述该测试&#xff0c;一个返回True/False的函数 语法格式&#…...

对数几率回归

对数几率回归简介 对数几率回归&#xff08;Logistic Regression&#xff09;是一种用于解决分类问题的经典统计模型&#xff0c;其核心思想是利用逻辑函数&#xff08;Sigmoid函数&#xff09;将线性回归模型的输出值映射到概率范围 [0, 1]&#xff0c;从而实现分类预测。对数…...

docker 配置同宿主机共同网段的IP 同时通过通网段的另一个电脑实现远程连接docker

docker配置网络 #宿主机执行命令 ifconfig 查询对应的主机ip 子网掩码 网关地址 #[网卡名称]&#xff1a;inet[主机IP] netmask[子网掩码] broadcast[网关地址]这里需要重点关注&#xff1a;eno1[网卡名称]以及【192.168.31.225】网关地址 在宿主机执行docker命令创建一个虚拟…...

4-7-1.C# 数据容器 - LinkedList(LinkedList 的定义、LinkedList 结点的遍历、LinkedList 的常用方法)

LinkedList 概述 LinkedList<T> 通过节点&#xff08;Node&#xff09;来存储数据&#xff0c;每个节点包含数据和指向下一个节点的引用 LinkedList<T> 存储的元素是可重复的 LinkedList<T> 支持泛型&#xff0c;可以指定存储的元素的类型 LinkedList<…...

「三」体验HarmonyOS端云一体化开发模板——使用DevEco Studio直接创建端云一体化工程

关于作者 白晓明 宁夏图尔科技有限公司董事长兼CEO、坚果派联合创始人 华为HDE、润和软件HiHope社区专家、鸿蒙KOL、仓颉KOL 华为开发者学堂/51CTO学堂/CSDN学堂认证讲师 开放原子开源基金会2023开源贡献之星 「目录」 「一」HarmonyOS端云一体化概要 「二」体验HarmonyOS端云一…...

确保以管理员权限运行 Visual Studio 开发者命令提示符

文章目录 解决方法&#xff1a;1. 以管理员身份运行命令提示符2. 改变目录权限3. 改变项目目录位置4. 检查文件系统权限 总结&#xff1a; ********************************************************************** ** Visual Studio 2022 Developer Command Prompt v17.12.0 …...

命令执行简单(棱角社区有毒)

前言&#xff1a;小迪安全2022第一节反弹shell&#xff0c;小迪用的是两台都是云服务器&#xff0c;没有服务器可以在自己的主机上搭建也是可以的&#xff0c;主机上搭两个网站 思路&#xff1a;生成一个木马文件&#xff0c;下载到本机&#xff0c;然后利用本机上传到目标主机…...

Keil基于ARM Compiler 5的工程迁移为ARM Compiler 6的工程

环境&#xff1a; keil版本为5.38&#xff0c;版本务必高于5.30 STM32F4的pack包版本要高于2.9 软件包下载地址&#xff1a;https://zhuanlan.zhihu.com/p/262507061 一、更改Keil中编译器 更改后编译&#xff0c;会报很多错&#xff0c;先不管。 二、更改头文件依赖 观察…...

Kafka-创建topic源码

一、命令创建topic kafka-topics --create --topic quickstart-events --bootstrap-server cdh1:9092 --partitions 2 --replication-factor 2 二、kafka-topics脚本 exec $(dirname $0)/kafka-run-class.sh org.apache.kafka.tools.TopicCommand "$" 脚本中指定了…...

【网络安全】(一) 0成本添加访问级监控

互联网的安全感这个概念源于阿里。顾名思义&#xff0c;让互联网的用户对于web产品能够产生足够的信任和依赖。特别是涉及到用户资金交易的站点&#xff0c;一次严重的用户资料泄露就可以彻底毁掉你的品牌。 然而当前阶段除了bat大部分互联网行业的企业对于网络安全给的重视都…...

【Three.js基础学习】26. Animated galaxy

前言 shaders实现星系 课程回顾 使用顶点着色器为每个粒子设置动画 a属性 &#xff0c; u制服 &#xff0c;v变化 像素比&#xff1a;window.devicePixelRatio 自动从渲染器检索像素比 renderer.getPixelRatio() 如何尺寸衰减&#xff0c; 放大缩小视角时&#xff0c;粒子都是同…...

vscode使用ssh配置docker容器环境

1 创建容器&#xff0c;并映射主机和容器的指定ssh服务端口 2 进入容器 docker exec -it <容器ID> /bin/bash 3在容器中安装ssh服务 apt-get update apt-get install openssh-server 接着修改ssh文件信息,将容器的10008端口暴露出来允许root用户使用ssh登录 vim /…...

皮卡剧网站怎样做/域名查询ip爱站网

这是我的服务器端代码在Java监听1880端口&#xff0c;并从浏览器/ client.java代码在本地主机&#xff0c;它给连接拒绝error.I复制该服务器代码从网页。我不知道这是什么代码在做。如何在java中监听和生成服务器端的客户端响应&#xff1f;import com.sun.net.httpserver.Http…...

wordpress4.7.4伪静态/故事型软文广告

要是还没有安装Tomcat 服务器 可以点击此 http://tomcat.apache.org/download-60.cgi链接 在官网下载Tomcat服务器. 具体安装方法 这里不做介绍. 在安装好Tomcat之后 接着来就来配置 在桌面建立一个文件夹取名Test(也可以建立在其他的硬盘上)在Test文件下建立WEB-INF文件夹(这…...

企业网站建设一般包含哪些内容/能翻到国外的浏览器

title: Spring加载资源文件冲突问题 tags: tomcat8springmacwebjarsj2cache categories: spring date: 2017-11-14 16:42:08背景 开发者在使用Spring做Properties文件载入时&#xff0c;这也是spring做placeholder的便捷之处。 classpath:和classpath*:想必也是大部分开发都会写…...

wordpress导航菜单动画/seo搜索优化是什么

正文共&#xff1a; 8098字 5图预计阅读时间&#xff1a; 21分钟项目仓库https://github.com/EthanYan6/E-commerce-sites.git结合代码查看笔记&#xff0c;效果更佳。笔记只是记录重点或者难点。每日分享It is our attitude at the beginning of a difficult task which, more…...

廊坊做网站公司/seo收索引擎优化

黑红搭配 Think的影子联想扬天A系列在外观上设计上充分考虑到商务用户的使用环境&#xff0c;整体以稳重的黑色为主色调。不过在一些细节方面的设计充满了人性化&#xff0c;并且对于日常的使用来说也具有不小的实用性。其实扬天系列在外观的设计上无论是配设还是部分细节设计都…...

乐清建站/优化技术基础

商人小鑫 Time Limit: 1000MS Memory limit: 65536K 题目描述 小鑫是个商人&#xff0c;当然商人最希望的就是多赚钱&#xff0c;小鑫也一样。这天&#xff0c;他来到了一个遥远的国度。那里有着n件商品&#xff0c;对于第i件商品需要付出ci的价钱才能得到。当然&#xff0c;对…...