稀碎从零算法笔记Day27-LeetCode:螺旋矩阵

题型:矩阵(二维数组)、边界问题

链接:54. 螺旋矩阵 - 力扣(LeetCode)

来源:LeetCode

题目描述

给你一个 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

题目思路

笔者思路看了题解后,茅塞顿开,这里引一下(也不能算严格意义上的题解,是鲤鱼大佬的视频):鲤鱼大佬视频讲解icon-default.png?t=N7T8https://www.bilibili.com/video/BV1Bb4y1x7xX/?spm_id_from=333.337.search-card.all.click&vd_source=a5b16b6aacc8b1e1029bbdc316cccfcf

当然笔者不会因此当懒狗的

OK,就这鲤鱼大佬的思路说一下:n x m 的矩阵实际上可以用二维数组 a[n][m] 来实现(讲道理这道题在纸上画一下很有利于理解)。

然后说一下题型那里的【边界处理】什么意思:不抽象的解释,可以给矩阵的四周划线,每遍历完一个边界(比方说遍历完第一行,是把上边界遍历完了;遍历完最后一列,是吧右边界遍历完了),就让这个边界【向内移动】——即“上往下走,右往左走,下往上走……”当然题目描述是顺时针遍历,所以按照这个顺序遍历,并不断更新边界,这个很有意思的题就解决了。

感觉是个很好理解且具象的思路。

C++代码

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {//边界问题/*1.遍历边界元素2.遍历完一次后,边界移动3.当边界“越界”(比如上边界 跑到 下边界的下面)*/ vector<int>answer;// 列数 行数int column = matrix[0].size(),row = matrix.size();int up = 0,left = 0,down = row -1,right = column -1;while(1){// 遍历上边界for(int i=left;i<=right;i++){answer.push_back(matrix[up][i]);}++up;if(up > down)break;// 遍历右边界for(int i=up;i<=down;i++){answer.push_back(matrix[i][right]);}--right;if(left > right)break;// 遍历下边界for(int i=right;i>=left;i--){answer.push_back(matrix[down][i]);}--down;if(up > down)break;// 遍历左边界for(int i=down;i>=up;i--){answer.push_back(matrix[i][left]);}++left;if(left > right)break;}return answer;    }
};

结算页面

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

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

相关文章

三、阅读器开发--4、阅读器目录、全文搜索功能开发

1、阅读器目录 1.1、实现目录 先实现目录的布局 定义一个蒙版&#xff0c;充满整个屏幕浮在阅读器上方&#xff0c;左侧为目录右侧为背景&#xff0c;目录下方包含一个tab&#xff0c;点击后会切换不同的内容&#xff0c;这里tab是目录、书签&#xff0c;这里可以通过如下的…

优思学院|鱼骨图、因果图可以用Minitab给制吗?

鱼骨图分析法&#xff0c;又被称作因果图或石川图&#xff0c;在职场工作中或者生活上都具有重要的应用价值。对懂得六西格玛的人来说&#xff0c;鱼骨图可以说是最基本的工具。 即使不用什么特别的软件&#xff0c;只需要一个PowerPoint模板&#xff0c;同样可以制作出让老板…

vscode c++环境配置

1.基础软件安装 安装Visual Studio Code. 安装C拓展。点击在vscode界面最左侧的Extensions图标&#xff08;打开快捷键&#xff1a;ctrlshiftX&#xff09;&#xff0c;搜索“C/C”&#xff0c;点击进行安装。 确保已安装gcc. 一般ubuntu系统会预装gcc.在终端窗口中输入如下…

苹果macOS 14.4.1正式发布:修复无法使用外接显示器USB集线器问题

3 月 26 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.4.1 更新&#xff08;内部版本号&#xff1a;23E224&#xff09;&#xff0c;本次更新距离上次发布隔了 18 天。 需要注意的是&#xff0c;因苹果各区域节点服务器配置缓存问题&#xff0c;可能有些地方探测…

AQS源码分析

前言 AbstractQueuedSynchronizer是抽象同步队列&#xff0c;其是实现同步机器的基础组件&#xff0c;并发包中的锁的底层就是使用AQS实现的。AQS中 维护了一个volatile int state&#xff08;代表共享资源&#xff09;和一个FIFO线程等待队列&#xff08;多线程争用资源被阻塞…

10个你必须知道的浏览器指纹检测工具,保护你的隐私安全

在当前的数字时代&#xff0c;个人隐私保护变得越来越重要&#xff0c;特别是对于互联网用户来说。有一种叫做“浏览器指纹”的技术&#xff0c;它能悄悄收集我们使用的浏览器和设备的各种细节信息。这本是为提供个性化服务&#xff0c;但对那些需要在不同平台同时管理多个账号…

day5-QT

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QFontDialog> //字体对话框类 #include<QFont> //字体类 #include<QMessageBox> //消息对话框类 #include<QColorDialog> //颜色对话框类 #include<QColor> //颜…

【嵌入式机器学习开发实战】(七)—— 政安晨:通过ARM-Linux掌握基本技能【环境准备:树莓派】

ARM-Linux是一种针对ARM架构的操作系统&#xff0c;它的设计目标是在低功耗、低成本的硬件平台上运行。ARM-Linux可以运行在多种ARM处理器上&#xff0c;包括树莓派。 树莓派&#xff08;Raspberry Pi&#xff09;是一款基于ARM架构的单板计算机&#xff0c;由英国的树莓派基金…

吴恩达2022机器学习专项课程(一) 4.1 梯度下降

问题预览 1.梯度下降算法的作用是&#xff1f; 2.梯度下降如何计算线性回归的成本函数&#xff1f; 3.所有的成本函数都是一个形状吗&#xff1f; 4.在非凸形状中&#xff0c;梯度下降的更新过程是&#xff1f; 5.在非凸形状中&#xff0c;不同的初值对最小化成本函数的影响是…

部署云原生边缘计算平台kubeedge

文章目录 1、kubeedge架构2、基础服务提供 负载均衡器 metallb2.1、开启ipvc模式中的strictARP2.2、部署metalb2.2.1、创建IP地址池2.2.2、开启二层转发&#xff0c;实现在k8s集群节点外访问2.2.3、测试 3、部署cloudcore3.1、部署cloudcore3.2、修改cloudcore的网络类型 4、部…

STM32学习笔记(7_2)- ADC模数转换器代码

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 本期开…

HTML静态网页成品作业(HTML+CSS+JS)——中华美食八大菜系介绍(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码实现图片轮播切换&#xff0c;共有1个页面。 二、…