面试热题(螺旋矩阵)

news2024/11/25 1:04:14

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

 一看到这个大家有没有想到

 就是一个螺旋形状,那这道题我们应该怎么解决?

       我们先来仔细的看,它这种螺旋形状的遍历是先【右-下-左-上】,所以我们可以先设置4个变量,去控制我们所需要遍历形状的边界

        int m=matrix.length;
        int n=matrix[0].length;
        //上下左右进行遍历
        int up=0;
        int down=m-1;
        int left=0;
        int right=n-1;

那么循环结束的条件的是什么呢?

       我们是要将目标数组中的元素按照螺旋的规则加入一个list集合中,那么循环的条件是不是就是我们集合list中的元素小于目标数组中的元素时就可以执行遍历,上文易得数组中每一个小数组的长度为n,数组中的有m个小数组,数组中的元素我们是不是可以用数组的个数*每个数组的长度

while(list.size()<m*n){

    
    }

先进行上层的从左向右遍历:

 //将上层的元素从左往右开始遍历
            //遍历的条件是最上层不能大于最下层
            if(up<=down){
                //从左向右
                for(int i=left;i<=right;i++){
                    list.add(matrix[up][i]);
                }
                //上边界下移
                up++;
            }

再从最后一列从上往下遍历

//将最后一列的元素从上往下开始遍历
            if(left<=right){
                //从上到下
                for(int i=up;i<=down;i++){
                    list.add(matrix[i][right]);
                }
                //往左移一列
                right--;
            }

最后一层从右往左遍历

//将最后一行从右往左遍历
            if(up<=down){
                for(int i=right;i>=left;i--){
                    list.add(matrix[down][i]);
                }
                down--;
            }

第一列从下自上遍历

 //将第一列进行从小往上进行遍历
            if(left<=right){
                for(int i=down;i>=up;i--){
                    list.add(matrix[i][left]);
                }
                left++;
            }

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

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

相关文章

01Mysql创建表

目录 一、题目要求 二、具体操作代码 三、查看结果&#xff1a; 一、题目要求 建立一张表&#xff1a; 表里面有多个字段&#xff0c;每一个字段对应一种数据类型 注意&#xff1a;表名&#xff0c;字段名都要起的有意义 二、具体操作代码 CREATE TABLE DataInfo (id INT …

python爬虫实战(2)--爬取某博热搜数据

1. 准备工作 使用python语言可以快速实现&#xff0c;调用BeautifulSoup包里面的方法 安装BeautifulSoup pip install BeautifulSoup完成以后引入项目 2. 开发 定义url url https://s.微博.com/top/summary?caterealtimehot定义请求头&#xff0c;微博请求数据需要cookie…

Windows 环境下 Python3 离线安装 cryptography 失败

发布Flask Web项目时&#xff0c;报错缺少Cryptography&#xff0c;于是尝试重新安装该库&#xff0c;但本机没有网络&#xff0c;只支持手动离线安装&#xff0c;尝试了pip、setup.py两种方式安装&#xff0c;结果都报错。。最后使用将安装包拷贝至本机(在其他电脑上安装的sit…

java.lang.OutOfMemoryError- unable to create new native thread 问题排查

问题描述 最近连续两天大约凌晨3点&#xff0c;线上服务开始异常&#xff0c;出现OOM报错。且服务所在的物理机只能ping通&#xff0c;但是无法登录。报错信息如下&#xff1a; ERROR 04-12 03:01:43,930 [DefaultQuartzScheduler_Worker-3] JobRunShell[JobRunShell]:211 Jo…

交叉编译驱动和应用出现警告提示错误“cc1:all warnings being treated as errors”解决方法

最近新玩的rk3588的板子,编译驱动时出现了警告提示错误“cc1:all warnings being treated as errors”,导致编译失败,仔细看了一下,就是内部出现了一个警告,一个未使用的变量出现的警告,导致了驱动编译失败,但是如果这样其他驱动会不会也这样,然后就写了一个printk的de…

算法练习--链表相关

文章目录 合并两个有序链表删除排序链表中的重复元素 1删除排序链表中的重复元素 2环形链表1环形链表2相交链表反转链表 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&…

怎么改ip地址 如何更改电脑ip地址

在网络世界中&#xff0c;IP地址是一个重要的标识&#xff0c;它被用于识别和定位设备在互联网中的位置。尽管大多数用户在日常生活中不需要更改IP地址&#xff0c;但在某些特定情况下&#xff0c;可能需要进行IP地址的更改。接下来&#xff0c;我们将介绍一些常见的方法来改变…

从零开始学习 Java:简单易懂的入门指南之面向对象(九)

面向对象进阶 前情回顾1.1 如何定义类1.2 如何通过类创建对象1.3 封装1.3.1 封装的步骤1.3.2 封装的步骤实现 1.4 构造方法1.4.1 构造方法的作用1.4.2 构造方法的格式1.4.3 构造方法的应用 1.5 this关键字的作用1.5.1 this关键字的作用1.5.2 this关键字的应用1.5.2.1 用于普通的…

后端开发8.品牌模块

概述 简介 效果图 数据库设计 DROP TABLE IF EXISTS `goods_brand`;CREATE TABLE `goods_brand` ( `goodsBrandId` int(11) NOT NULL AUTO_IN

基于jeecg-boot的nbcio-boot因升级mybatis-plus到3.5.3.1和JSQLParser 到4.6而引起的在线报表配置报错处理

nbcio-boot因为升级mybatis-plus到3.5.3.1和JSQLParser 到4.6&#xff0c;引起的在线报表配置报错。 导致主页显示不出任务东西。 sql语句如下&#xff1a; select DATE_FORMAT(c.days, %Y%m) x, count(num) y from (select DATE_FORMAT(b.DEPLOY_TIME_, %Y-%m-%d) AS days , …

vue2传值方式总结 (十一种方法)

一.父传子传递 &#xff08;1&#xff09;在父组件的子组件标签上绑定一个属性&#xff0c;挂载要传输的变量 &#xff08;2&#xff09;在子组件中通过props来接受数据&#xff0c;props可以是数组也可以是对象&#xff0c;接受的数据可以直接使用 props: [“属性 名”] prop…

golang 自定义exporter - 服务连接数 portConnCount_exporter 导出器

需求&#xff1a; 1、计算当前6379 、3306 服务的连接数 2、可prometheus 语法查询 下面代码可直接使用&#xff1a; 注&#xff1a; 1、windows 与linux的区分 第38行代码 localAddr : fields[1] //windows为fields[1] &#xff0c; linux为fields[3] 2、如需求 增加/修改/删除…

【山河送书第六期】:《码上行动:零基础学会Python编程( ChatGPT版)》参与活动,送书两本!!

《码上行动:零基础学会Python编程( ChatGPT版》 前言内容提要本书亮点购买链接参与方式往期赠书回顾&#xff1a; 前言 在过去的 5 年里&#xff0c;Python 已经 3 次获得 TIOBE 指数年度大奖&#xff0c;这得益于数据科学和人工智能领域的发展&#xff0c;使得 Python 变得异…

Openlayers实战:多数据分散聚合

在飞机、轮船等地图显示的应用中,很多时候会用到数据聚合,Openlayers中提供了Cluster这个API ,他作为souce的一部分,设定distance值,如果2个点的间距小于 distance 所设置的数时,就会以聚合的方式显示。从而解决了数据淤积显示的状态,非常实用。 效果图 源代码 /* * @…

【基础IO】动静态库 {动静态库的创建和使用;动态库的加载;默认优先使用动态链接;为什么要有库;动态链接的优缺点;静态链接的优缺点;一些有趣的库}

动静态库 一、静态库(.a) 1.1 如何创建静态库&#xff1f; 编写源文件与头文件。注意&#xff1a;库的源文件没有main函数&#xff01; 将所有的源文件编译生成目标文件。(如果只提供.h和.o给用户&#xff0c;用户也可以成功编译运行。但这样的做法太过麻烦&#xff0c;且容易…

8个值得收藏的在线3D建模工具

如今&#xff0c;许多设计师、艺术家和建筑师尝试学习进行 3D 建模来表达他们的想法。 但 3D 建模并不总是看起来那样。 我们所有人都很难找到合适的工具&#xff0c;尤其是在学习阶段。 但不要害怕&#xff01; 你可以学习仅使用浏览器进行建模。 有许多基于浏览器的 3D 建模…

Scala(第六章 面向对象)

文章目录 6.1 Scala包 6.1.1 包的命名6.1.2 包说明&#xff08;包语句&#xff09;6.1.3 包对象6.1.4 导包说明 6.2 类和对象 6.2.1 定义类6.2.2 属性 6.3 封装 6.3.1 访问权限6.3.2 方法6.3.3 创建对象6.3.4 构造器6.3.5 构造器参数 6.4 继承与多态6.5 抽象类 6.5.1 抽象属性和…

实例034 直接在窗体上绘图

实例说明 含有Graphics对象的控件都能够在其上进行绘图&#xff0c;很多软件就是通过Graphics对象来美化程序的主界面&#xff0c;因为窗体中含有Graphics对象&#xff0c;所以可以将窗体看作一个大画板&#xff0c;一个可以在上面绘图的特殊控件。本例设计了一个简单的绘图软…

Pycharm 双击启动失败?

事故 双击 Pycharm 后&#xff0c;出现加载工程&#xff0c;我不想加载这个工程&#xff0c;就点击了弹出的 cancle 取消按钮。然后再到桌面双击 Pycharm 却发现无法启动了。哪怕以管理员权限运行也没用&#xff0c;就是不出界面。 原因未知 CtrlshiftESC 打开后台&#xff…

什么是埋阻埋容工艺?

PCB埋阻埋容工艺是一种在PCB板内部埋入电阻和电容的工艺。通常情况下&#xff0c;PCB上电阻和电容都是通过贴片技术直接焊接在板面上的&#xff0c;而埋阻埋容工艺则将电阻和电容嵌入到PCB板的内部层中&#xff0c;这种印制电路板&#xff0c;其自下而上依次包括第一介电层&…