leetcode面试经典150题——35 螺旋矩阵

题目: 螺旋矩阵

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

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

提示:

m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
leetcode链接

方法一:模拟
我们顺时针螺旋输出矩阵的顺序可以看成为输出一个个子矩阵的边框,即每个矩阵的第一行,最后一列,最后一行,第一列,然后去除掉重复输出的四个对角,再对下一个子矩阵循环此输出,考虑特殊情况当子矩阵为一行或者一列时候,直接输出一行或者一列。
时间复杂度:o(mn) 矩阵每个元素遍历一次,一共m*n个元素
空间复杂度:o(1)

vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> ans;int m  = matrix.size(),n = matrix[0].size();int r = 0,l = 0;while(m>0&&n>0){for(int j=l;j<l+n;j++){//输出第一行ans.push_back(matrix[r][j]);}if(m==1)break;ans.pop_back();//取出重复存储的元素for(int i=r;i<r+m;i++){//输出最后一列ans.push_back(matrix[i][l+n-1]);}if(n==1)break;ans.pop_back();//取出重复存储的元素for(int j=l+n-1;j>=l;j--){//输出最后一行ans.push_back(matrix[r+m-1][j]);}ans.pop_back();//取出重复存储的元素for(int i=r+m-1;i>=r;i--){//输出第一列ans.push_back(matrix[i][l]);}ans.pop_back();//取出重复存储的元素m-=2,n-=2;//更新下一个子矩阵的行列数r++,l++;//更新下一个子矩阵的第一个元素的行列下标}return ans;}

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

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

相关文章

Linux centos8安装JDK1.8、tomcat

一、安装jdk 1.如果之前安装过jdk&#xff0c;先卸载掉旧的 rpm -qa | grep -i jdk 2.检查yum中有没有java1.8的包 yum list java-1.8* 3.yum安装jdk yum install java-1.8.0-openjdk* -y 4.验证 二、安装tomcat Index of /tomcat 可以在这里选择你想要安装的tomcat版本…

学习设计模式的一个好网址

常用设计模式有哪些&#xff1f; (refactoringguru.cn)https://refactoringguru.cn/design-patterns

统信UOS_麒麟KYLINOS安装奇安信并自动配置服务器IP端口号

往期好文&#xff1a;麒麟iso镜像中GRUB字体大小怎么改&#xff1f; hello&#xff0c;大家好啊&#xff0c;今天我要给大家介绍的是在统信UOS或者麒麟KYLINOS操作系统上安装奇安信网神终端管理系统&#xff0c;并通过自动配置IP及端口号来简化管理流程的方法。这种配置主要通过…

Linux-实现小型日志系统

目录 一.日志 二.实现任意个数元素求和 三.编写一个日志函数 1.设置日志等级 2.设置日志时间 3.设置日志的打印格式 4.将日志的内容输出到文件 一.日志 日志等级&#xff0c;日志时间&#xff0c;日志内容&#xff0c;文件的名称和行号 日志等级…

UEFI下Windows10和Ubuntu22.04双系统安装图解

目录 简介制作U盘启动盘并从U盘启动电脑安装系统安装Windows系统安装Ubuntu 附录双系统时间不一致 简介 传统 Legacy BIOS主板下的操作系统安装可参考本人博客 U盘系统盘制作与系统安装&#xff08;详细图解&#xff09; &#xff0c;本文介绍UEFI主板下的双系统安装&#xff…

关于mysql高版本使用groupby导致的报错

在开发时&#xff0c;遇到mysql版本在5.7.X及以上版本时使用group by 语句会报以下的错误 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column business_typ…

代码混淆技术探究与工具选择

引言 在软件开发中&#xff0c;保护程序代码的安全性是至关重要的一环。代码混淆&#xff08;Obfuscated code&#xff09;作为一种常见的保护手段&#xff0c;通过将代码转换成难以理解的形式来提升应用被逆向破解的难度。本文将介绍代码混淆的概念、方法以及常见的代码混淆工…

[Linux] Bash脚本多函数应该如何执行?使用eval提高脚本编写效率!

在工作过程中经常会编写一些测试脚本&#xff0c;有些脚本里有多个函数&#xff0c;要通过用户输入执行对应的函数&#xff0c;如这样&#xff1a; 这也太麻烦了吧 执行如下&#xff1a; 这样在函数多的情况下需要写很多判断&#xff0c;效率低下。 我们可以使用eval命令来进行…

『PyTorch学习笔记』如何快速下载huggingface模型/数据—全方法总结

如何快速下载huggingface模型/数据—全方法总结 文章目录 一. 如何快速下载huggingface大模型1.1. IDM(Windows)下载安装连接1.2. 推荐 huggingface 镜像站1.3. 管理huggingface_hub cache-system(缓存系统) 二. 参考文献 一. 如何快速下载huggingface大模型 推荐 huggingface…

MySQL-宋红康-(课P12-P13)-SQL分类和SQL的语言规则规范

b站课程&#xff1a; 12-SQL概述与SQL分类_哔哩哔哩_bilibili &#x1f436;7. SQL SQL&#xff1a;Structure Query Language结构化查询语言&#xff0c;它是使用关系模型的数据库应用语言&#xff0c;由IBM上世纪70年代开发出来。后由美国国家标准局&#xff08;ANSI&#…

java多线程(二)线程池

目录 java线程池 线程池应用场景&#xff1a; 如何创建线程池&#xff1a; 有什么区别&#xff1a; 不同线程池对应的应用场景 案例 输出结果 java线程池 Java线程池是一种预先创建一定数量的线程&#xff0c;并将任务提交给这些线程执行的机制。线程池可以避免频繁创建…

C++新经典模板与泛型编程:将trait类模板用作模板参数

将trait类模板用作模板参数 template<typename T> struct SumFixedTraits;template<> struct SumFixedTraits<char> {using sumT int;static sumT initValue() {return 0;} };template<> struct SumFixedTraits<int> {using sumT __int64;sta…