螺旋矩阵(顺时针遍历矩阵)

news2024/9/25 9:36:02

leetcode 54.螺旋矩阵 

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

和剑指office29题相似;

思路:既然是顺时针遍历一圈,那么我们就分别从上边,右边,下边,左边依次遍历,一圈完后在遍历下一圈,直到符合终止条件,停止循环,过程中将遍历到的值存入集合中,返回集合即可;

大体的思路如上所示,是很简单的,但是这个题的难点在于:

1.保证边界的取值是正确的,不会出现数组越界

2.我们需要保持每次遍历时的左闭右开还是左开右闭是统一的

3.终止条件的判断,什么时候算是全部遍历完成了

首先我们需要先定义四个变量,分别是上右下左,它们分别代表遍历的当前这个圈的上右下左四个边所处的位置,每遍历一次,就对应的缩小一个位置(这里可以实现左开右闭或者左闭右开),直到我们左和右相遇,或者上和下相遇,这是就意味着每个数已经遍历完成,就是终止条件。

综上,代码如下:

public List<Integer> spiralOrder(int[][] matrix) {
    List<Integer> lists = new ArrayList<>();
    int m = matrix.length ;//定义行数
    int n = matrix[0].length ;//定义列数
    //上下左右
    //注意,这里的上下左右四个值,分别指的是遍历这一行或者这一列时,保持不动的那个行数或列数
    //例如我们遍历第一行时,行数是up保持不变,列数是i进行递增
    int up = 0;//遍历时的点坐标[up,i]
    int right = n-1;//[i,right]
    int down = m-1;//[down,i]
    int left = 0;//[i,left]

    while (true){
        //从左到右
        for (int i = left; i <= right; i++) {lists.add(matrix[up][i]);}
        if (++up>down){break;}//每一行或者一列遍历完后,都要缩圈,这里是上边向下缩圈
        //up已经完成加1操作,向下移动了一行,因为下面的从上到下遍历,是从up这一行开始的
        //所以就实现了我们的右闭,后面的以此类推;
        //当移动后的up与down冲突时,意味着遍历已经结束了,break跳出循环,下面的同理。

        //从上到下
        for (int i = up; i <= down; i++) {lists.add(matrix[i][right]);}
        if (--right<left){break;}//右边遍历完,向左缩圈

        //从右到左
        for (int i = right; i >= left; i--) {lists.add(matrix[down][i]);}
        if (--down<up){break;}//下边遍历完,向上缩圈

        //从下到上
        for (int i = down; i >= up; i--) {lists.add(matrix[i][left]);}
        if (++left>right){break;}//左边遍历完,向右缩圈
    }
    return lists;
}

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

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

相关文章

SQL-游标-更新删除-多列指向

--切换数据库 use MyDatabase--创建游标(scroll&#xff1a;滚动游标) declare mycur cursor scroll for select EmpNo from Employee --打开游标 open mycur --关闭游标 close mycur --删除游标 deallocate mycur--提取第一行 --利用游标进行数据的修改 fetch absolute 2 from…

【django中处理静态的数据 css js img】

django中处理静态的数据 css js img 1.创建django项目2.打开项目3.配置settingpy中找到STATIC_URL3.1静态资源 4.创建静态资源文件夹5.开启服务6. 网页请求7.使用模板 进行编写 并请求8.在模板中进行 图片的请求9.模板中使用动态url {% static %}10 static的 动态url加载 1.创建…

C++读取易语言字节集图片opencv识别滑块

易语言字节集在C中其实是字节数组的形式&#xff0c;这边做的是一个本地滑块识别的&#xff0c;识别已经实现&#xff0c;主要解决读入字节集的问题&#xff0c;因为图片的大小问题&#xff0c;直接传字节集恐怕不行&#xff0c;所以在易语言处理图片&#xff0c;然后在内容中C…

软考高级系统架构设计师(九) 作文模板-微服务架构(待继续完善)

目录 举一反三-论微服务架构及其应用 ps: 更多微服务信息 ps: 微服务与SOA区别 微服务架构举例 微服务的落地技术 微服务的技术可大致分为五类 举一反三-论微服务架构及其应用 论微服务架构及其应用 微服务提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间互相…

vue 将登录后信息放入cookie中,后端请求接口携带

第一步 import Cookies from "js-cookie";//将需要的信息放入cookie Cookies.set("deptId", res.user.dept.deptId, { expires: 30 });引入cookies import Cookies from "js-cookie";// 查询参数queryParams: {deptName: undefined,status: un…

Rust语言从入门到入坑——(9)Rust 生命周期

文章目录 0、引入1、生命周期注释2、结构体中使用字符串切片引用3、静态生命周期4、泛型、特性与生命周期协同作战5、总结 0、引入 Rust 生命周期机制是与所有权机制同等重要的资源管理机制&#xff0c;之所以引入这个概念主要是应对复杂类型系统中资源管理的问题。 引用是对…

【云原生丶Docker】DockerFile完全指南

DockerFile构建过程 DockerFile 是Docker的一个配置文件&#xff0c;本质上来说它只是一个文本文件&#xff0c;它是用来构建Docker镜像的。DockerFile配置文件中包含了一系列的指令和配置信息&#xff0c;用于描述如何构建镜像以及如何运行容器。通过编写 Dockerfile&#xf…

【c++11】新的类功能和可变参数包

c11 新增默认成员函数类成员变量初始化关键字defaultdelete 委托构造 可变参数包递归展开参数包逗号表达式展开参数包 结语 新增默认成员函数 原来c类中&#xff0c;有6个默认成员函数&#xff1a; 构造函数析构函数拷贝构造函数拷贝赋值重载取地址函数const 取地址重载 默认…

将mp4视频推流rtsp,并转为http直播流,在前端显示

最近有个需求&#xff0c;在vue页面的video组件播放直播流&#xff0c;本来想用flv.js&#xff0c;但是必须要flv格式才行&#xff0c;所以还是用原生video播放http直播流。 1. 将本地mp4推流rtsp 下载并解压EasyDarwin&#xff0c;双击EasyDarwin.exe运行&#xff0c;在控制…

【python】web应用开发DRF框架

DRF 【python】web应用开发DRF框架 Django rest_framework, 简称 drf, 可以更方便的使用django写出符合 RESTful 规范的接口, (缩减编写api接口的代码) Django REST framework是一个建立在Django基础之上的Web应用开发框架(Django的一个app)&#xff0c;可以快速的开发REST A…

【IMX6ULL驱动开发学习】12.Linux驱动之设备树

承接上一篇博客 【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想&#xff08;学习设备树过渡部分&#xff09; 代码获取&#xff1a;https://gitee.com/chenshao777/imx6-ull_-drivers 我后面将三个层合并了&#xff08;实际上只有前两层&#xff09;&#xff0c;合并…

【Java入门】注释、关键字、常量、变量、数据类型

注释&#xff1a; 作用 : 可以记录代码所实现的功能&#xff0c;方便程序员或代码编写者阅读代码以及方便他人更好理解代码 注释分类&#xff1a; 单行注释 格式&#xff1a; //注释信息多行注释 格式&#xff1a; /注释信息/文档煮熟 格式&#xff1a;/** 注释信息*/ /***…

TCP的socket API

1、核心类 ServerSocket &#xff1a;服务器使用的socket Socket : 服务器和客户端都会使用的socket accept进行的工作是拉客 对应操作系统来说&#xff0c;建立TCP连接是内核的工作 accept要干的就是等连接建立好了&#xff0c;把这个连接给拿到应用程序中。 如果当前连接…

chatgpt赋能python:Python获取文件后缀名

Python获取文件后缀名 在Python编程中&#xff0c;经常需要获取文件的后缀名&#xff0c;例如在处理文件上传、下载、压缩等操作时&#xff0c;需要对文件后缀名进行判断和处理。本文将介绍Python获取文件后缀名的两种常用方法。 方法一&#xff1a;使用split()函数 Python的…

【C语言初阶(2)】循环语句:while 循环

文章目录 1. while 语句介绍1.1 语法结构1.2 while 语句执行的流程 2. while 语句中的 break 和 continue2.1 break 介绍2.2 continue 介绍 我们已经掌握了 if 语句&#xff0c;当条件满足的情况下&#xff0c;if 语句的后的语句执行&#xff0c;反之不执行&#xff1b; 但是 i…

ChatGPT最新版多功能批量写作工具激发创作的无限可能

随着科技的不断发展&#xff0c;人工智能逐渐渗透到各个领域&#xff0c;其中包括写作领域。近年来&#xff0c;OpenAI推出的ChatGPT最新版多功能批量写作工具&#xff0c;为写作者们带来了全新的创作体验。这一工具不仅能够帮助写作者提高工作效率&#xff0c;还能够激发创作的…

chatgpt赋能python:Python获取定位的SEO指南

Python获取定位的SEO指南 什么是SEO SEO&#xff0c;即搜索引擎优化&#xff0c;是通过对网站进行优化&#xff0c;提高排名&#xff0c;从而增加搜索引擎来的流量&#xff0c;并达到提高转化率的目的。在这个数字时代&#xff0c;对于大多数网站来说&#xff0c;SEO已经成为…

idea maven 中模块显示灰色,依赖不加载

idea maven 中模块显示灰色&#xff0c;依赖刷新了几次都无法加载引入 后面发现是被MAVEN设置忽略了 去掉忽略文件然后reimport &#xff0c;就正常了

通过cifar-10数据集理解numpy数组的高(H)、宽(W)、通道数(C)

文章目录 1、CIFAR-10数据集介绍1.1 CIFAR-10数据集的构成1.2 batches.meta1.3 data_batch_n.py & test_batch.py 2、获取一张图片的data数据2.1 反序列化获得numpy数据2.2 清楚numpy中的H、W、C的含义2.3 清楚RGB图片在numpy中的表示 3、处理图片数据的代码 1、CIFAR-10数…

IDEA启动报错:Process finished with exit code 0

问题 SpringBoot项目启动后自动关闭 方案一 在pom中添加spring-boot-starter-web依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId> </dependency>方案二 在pom中…