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链接

方法一:模拟
我们顺时针螺旋输出矩阵的顺序可以看成为输出一个个子矩阵的边框,即每个矩阵的第一行,最后一列,最后一行,第一列,然后去除掉重复输出的四个对角,再对下一个子矩阵循环此输出,考虑特殊情况当子矩阵为一行或者一列时候,直接输出一行或者一列。

如下图所示,螺旋输出该矩阵
在这里插入图片描述
第一次依次输出最外层矩阵四个边框,然后去除重复元素(即4个角多输出了一次)
在这里插入图片描述
再输出子矩阵的四个边框,重复操作,直到没有子矩阵
在这里插入图片描述
在这里插入图片描述

时间复杂度: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.mzph.cn/news/209333.shtml

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

相关文章

Redis Geo操作地理位置

Redis Geo 使用场景API列表名词API列表Springboot使用mavenyamlTest 注意事项 Redis Geo 是Redis在3.2版本中新增的功能&#xff0c;用于存储和操作地理位置信息 使用场景 滴滴打车&#xff1a;这是一个对地理位置精度要求较高的场景。通过使用Redis的GEO功能&#xff0c;滴滴…

12月8日作业

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数&#xff1b;将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;…

kafka学习笔记--安装部署、简单操作

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

Day54力扣打卡

打卡记录 出租车的最大盈利&#xff08;动态规划&#xff09; 链接 class Solution:def maxTaxiEarnings(self, n: int, rides: List[List[int]]) -> int:d defaultdict(list)for start, end, w in rides:d[end].append((start, end - start w))f [0] * (n 1)for i in…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑源网荷效益的峰谷电价与峰谷时段双层优化模型》

这个标题涉及到电力定价和能源效益的优化模型。让我来分解一下&#xff1a; 峰谷电价&#xff1a;这是一种电力定价策略&#xff0c;即在一天内不同时间段设定不同的电价。通常&#xff0c;高峰时段&#xff08;需求高&#xff09;的电价相对较高&#xff0c;而低谷时段&#x…

人工智能学习9(LightGBM)

编译工具&#xff1a;PyCharm 文章目录 编译工具&#xff1a;PyCharm lightGBM原理lightGBM的基础使用案例1&#xff1a;鸢尾花案例2&#xff1a;绝对求生玩家排名预测一、数据处理部分1.数据获取及分析2.缺失数据处理3.数据规范化4.规范化输出部分数据5.异常数据处理5.1删除开…

利用私域运营的四大策略实现企业营销目标

私域运营指的是企业利用各种网络技术和工具&#xff0c;以自己的平台为基础&#xff0c;建立、维护、更新和升级与用户的私人关系。这种运营模式让企业能更准确地了解客户需求和喜好&#xff0c;通过定制化服务、优惠政策、个性化体验等方式&#xff0c;获取更多的客户价值。相…

Child Mind Institute - Detect Sleep States(2023年第一次Kaggle拿到了银牌总结)

感谢 感谢艾兄&#xff08;大佬带队&#xff09;、rich师弟&#xff08;师弟通过这次比赛机械转码成功、耐心学习&#xff09;、张同学&#xff08;也很有耐心的在学习&#xff09;&#xff0c;感谢开源方案&#xff08;开源就是银牌&#xff09;&#xff0c;在此基础上一个月…

基于Lucene的全文检索系统的实现与应用

文章目录 一、概念二、引入案例1、数据库搜索2、数据分类3、非结构化数据查询方法1&#xff09; 顺序扫描法(Serial Scanning)2&#xff09;全文检索(Full-text Search) 4、如何实现全文检索 三、Lucene实现全文检索的流程1、索引和搜索流程图2、创建索引1&#xff09;获取原始…

模板与泛型编程

函数模板 显示实例化 区别定义与声明 T是模板形参 int是模板实参 inpunt是函数形参 3是函数实参 显示实例化 模板必须实例化可见 翻译单元一处定义原则 与内联函数异同 引入原因&#xff1a;函数模板是为了编译器两个阶段的处理 内联函数是为了能在编译期展开 模板实参的类…

Android Kotlin语言下的文件存储

目录 将数据存储到文件中 创建文件和保存数据 读取文件 SharedPreferences存储 存储数据到SharedPreferences中 Context类中的getSharedPreferences()方法 Activity类中的getPreferences()方法 从SharedPreferences中读取数据 SQLite数据库存储 创建数据库 调用数据…

Java导出word

原文地址 传入的值不能为null,否则会报错&#xff0c;IXDocReport 有自己的判null规则&#xff0c;比较麻烦&#xff0c;建议代码直接把null替换成"" public void exportWord1(WeeklyMeetDataDto dto, HttpServletResponse response) {ServletOutputStream downLoad…

Ignis - Interactive Fire System

Ignis - 点火、蔓延、熄灭、定制! 全方位火焰系统。 这个插件在21年的项目中使用过很好用值使用概述 想玩火吗?如果想的话,那么Ignis就是你的最佳工具。有了Ignis,你可以把任何物体、植被或带皮带骨的网状物转换为可燃物体,它就会自动着火。然后,火焰可以蔓延,点燃其他物…

Java 一对多

前言 Internet 协议集支持一个无连接的传输协议&#xff0c;该协议称为用户数据报协议&#xff08;UDP&#xff0c;User Datagram Protocol&#xff09;。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。 此代码就是基于UDP协议编写。 通常把一对多的…

【docker 】centOS 安装docker

官网 docker官网 github源码 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 安装软件包 yum install -y yum-utils \device-mapper-persistent-data…

【优选算法系列】【专题二滑动窗口】第四节.30. 串联所有单词的子串和76. 最小覆盖子串

文章目录 前言一、串联所有单词的子串 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写 1.2.3 题目总结二、最小覆盖子串 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写 …

【Docker】进阶之路:(四)操作容器

【Docker】进阶之路&#xff1a;&#xff08;四&#xff09;Docker容器 容器的生命周期创建容器docker createdocker run 管理容器查看运行的容器&#xff1a;查看所有容器&#xff1a; 启动与终止启动容器终止容器 进入容器docker attachdocker exec 导出和导入导出导入 容器的…

浅谈5G基站节能及数字化管理解决方案的设计与应用-安科瑞 蒋静

截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5G基站的能耗成为…

actitivi自定义属性(二)

声明&#xff1a;此处activiti版本为6.0 此文章介绍后端自定义属性解析&#xff0c;前端添加自定义属性方法连接&#xff1a;activiti自定义属性&#xff08;一&#xff09;_ruoyi activiti自定义标题-CSDN博客 1、涉及到的类如下&#xff1a; 简介&#xff1a;DefaultXmlPar…

在 JavaScript 中导入和导出 Excel XLSX 文件:SpreadJS

在 JavaScript 中导入和导出 Excel XLSX 文件 2023 年 12 月 5 日 使用 MESCIUS 的 SpreadJS 将完整的 JavaScript 电子表格添加到您的企业应用程序中。 SpreadJS 是一个完整的企业 JavaScript 电子表格解决方案&#xff0c;用于创建财务报告和仪表板、预算和预测模型、科学、工…