LeetCode 刷题 [C++] 第54题.螺旋矩阵

题目描述

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

题目分析

  1. 根据题意可知,我们不需要记录已经走过的路径,只需要通过调整矩阵的上下左右边界即可完成任务;
  2. 首先创建出矩阵的上下左右边界;
  3. 开始遍历矩阵:
    先从左上角,从左向右遍历第一行,然后删除第一行,即重新定义上边界;
    然后判断重新定义后的上下边界是否交错,如果交错,则表示螺旋矩阵遍历结束,跳出循环,返回数组;
    如果重新定义后的边界没有交错,则接着遍历矩阵;
  4. 使用3中类似的逻辑接着向下向左向上移动;
  5. 不断循环步骤3和4,直至某两个边界交错,跳出循环为止,最后返回结果。

Code

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {if (matrix.empty()) return {};vector<int> res;res.reserve(matrix.size()*matrix[0].size()); //预分配容器的大小int upper = 0, down = matrix.size() - 1;int left = 0, right = matrix[0].size() - 1;while (true) {// 向右遍历for (int i = left; i <= right; ++i) {res.emplace_back(matrix[upper][i]);}if (++upper > down) {break;}// 向下遍历for (int i = upper; i <= down; ++i){res.emplace_back(matrix[i][right]);}if (--right < left) {break;}// 向左遍历for (int i = right; i >= left; --i) {res.emplace_back(matrix[down][i]);}if (--down < upper) {break;}// 向上遍历for (int i = down; i >= upper; --i) {res.emplace_back(matrix[i][left]);}if (++left > right) {break;}}return res;}
};

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

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

相关文章

什么是大模型微调?微调的分类、方法、和步骤

2023年,大模型成为了重要话题,每个行业都在探索大模型的应用落地,以及其能够如何帮助到企业自身。尽管微软、OpenAI、百度等公司已经在创建并迭代大模型并探索更多的应用,对于大部分企业来说,都没有足够的成本来创建独特的基础模型(Foundation Model):数以百亿计的数据…

VL817-Q7 USB3.0 HUB芯片 适用于扩展坞 工控机 显示器

VL817-Q7 USB3.1 GEN1 HUB芯片 VL817-Q7 USB3.1 GEN1 HUB芯片 VIA Lab的VL817是一款现代USB 3.1 Gen 1集线器控制器&#xff0c;具有优化的成本结构和完全符合USB标准3.1 Gen 1规范&#xff0c;包括ecn和2017年1月的合规性测试更新。VL817提供双端口和双端口4端口配置&…

FMM 笔记:FMM(colab上执行)【官方案例解读】

在colab上运行&#xff0c;所以如何在colab上安装fmm&#xff0c;可见FMM 笔记&#xff1a;在colab上执行FMM-CSDN博客 fmm见&#xff1a;论文笔记&#xff1a;Fast map matching, an algorithm integrating hidden Markov model with precomputation_ubodt(upper bounded ori…

分布式事务(7)之Seata简介

一、分布式事务解决方案 2PC即两阶段提交协议&#xff0c;是将整个事务流程分为两个阶段&#xff0c;准备阶段&#xff08;Prepare phase&#xff09;、提交阶段&#xff08;commit phase&#xff09;&#xff0c;2是指两个阶段&#xff0c;P是指准备阶段&#xff0c;C是指提交…

vue2 computed原理,与watch的区别

文章目录 computed实现原理computed与watch的区别computedwatch computed实现原理 源码实现computed 依赖收集&#xff1a;当我们首次访问一个计算属性时&#xff0c;它的 getter 函数会被执行。在 getter 函数执行过程中&#xff0c;会访问它所依赖的响应式数据&#xff0c;这…

智慧医疗时代来临,全视通给大家介绍智慧病房

随着科技的不断发展&#xff0c;智慧医疗已经成为医疗行业的一个重要趋势。智慧医疗技术的应用&#xff0c;不仅提高了医疗服务的效率和质量&#xff0c;也使得患者的就医体验更加舒适和便捷。在智慧医疗时代&#xff0c;智慧病房呼叫系统作为其中的一项重要技术&#xff0c;已…

用html编写的小广告板

用html编写的小广告板 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</tit…

springboot003图书个性化推荐系统的设计与实现(源码+调试+LW)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的图书个…

Langchain中向量数据库FAISS的使用

1 第一次存入数据库&#xff1a; from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_community.embeddings import JinaEmbeddings from langchain_community.vectorstores import FAISS fro…

app广播亮暗屏幕监听

一、屏幕亮暗监听 /*** 息亮屏* 广播监听*/private ScreenStatusReceiver mScreenStatusReceiver;private class ScreenStatusReceiver extends BroadcastReceiver {String SCREEN_ON "android.intent.action.SCREEN_ON";String SCREEN_OFF "android.intent.a…

【深度学习】神经网络的学习

文章目录 常用损失函数均方误差函数&#xff08;mean squared error&#xff09;交叉熵误差函数&#xff08;cross entropy error&#xff09;/对数损失函数&#xff08;log loss function&#xff09; 数值微分&#xff08;numerical gradient&#xff09;前向差分&#xff08…

nacos只发现不发布服务fiddler请求转发到本地

https://blog.csdn.net/qq_38826019/article/details/109583854 nacos配置文件参数 spring.cloud.nacos.discovery.register-enabled : false fiddler转发 regex:http://xxx:8080/api/xxx/(?.)$ http://localhost:9209/${param}

2024.2.26

今天又复习了一下熟悉的C语言 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<windows.h>int main() {//数组初始化int n;scanf("%d", &n);int array[500];int i 0;for (i 0; i < n; i){scanf("%…

掌握ChatGPT润色绝技:什么是人工智能写作以及如何使用它来完成写作任务

如对AI写论文感兴趣&#xff0c;欢迎添加作者wx讨论 : ryan_2982 人工智能 (AI) 的出现开创了技术进步的新时代&#xff0c;彻底改变了包括写作和内容创作在内的各个行业。人工智能写作和人工智能提示已成为可以简化和增强写作任务的强大工具。在这篇博文中&#xff0c;我们将…

JAVA讲解算法-排序算法-冒泡排序算法-01

一、定义 冒泡排序&#xff08;Bubble Sort&#xff09;也是一种简单直观的排序算法。它重复地走访过要排序的数列&#xff0c; 一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已…

matplotlib 入门教程

一. matplotlib 简介 Matplotlib是一个Python 2D绘图库&#xff0c;它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。 Matplotlib试图让简单的事情变得更简单&#xff0c;让无法实现的事情变得可能实现。 只需几行代码即可生成绘图&#xff0c;直方…

求购EV代码签名证书,看看性价比最优选项要多少钱?

在当今的数字化时代&#xff0c;EV代码签名证书作为一种强化软件安全防线的顶级数字证书&#xff0c;承担着验证软件源码真伪和完整性的重要任务。对于软件开发者和公司来说&#xff0c;购置EV代码签名证书无疑是必不可少的&#xff0c;而其年度费用也成为各方密切关注的核心议…

【计算机网络】DNS/ICMP协议/NAT技术

文章目录 一、DNS(Domain Name System)1.DNS背景2.域名3.浏览器中输入url后,发生的事情 二、ICMP协议1.什么是ICMP协议2.ICM功能3.ICMP的报文格式4.ping命令5.traceroute命令 三、NAT技术1.NAT技术背景2.NAT IP转换过程3.NAPT4.NAT技术的缺陷5.NAT和代理服务器 四、TCP/IP五层模…

【数据结构和算法】链表的简单实现

目录 c版本c语言版 &#x1f431;‍&#x1f680;个人博客https://blog.csdn.net/qq_51000584/ &#x1f431;‍&#x1f464;收录专栏&#xff1a;数据结构和算法 &#x1f431;‍&#x1f453;专栏目标&#xff1a;分享一些学习的代码 &#x1f431;‍&#x1f4bb;作者&…