【LeetCode热题100】54. 螺旋矩阵

一.题目要求

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

四.解题思路

找到四个方向坐标变化的规律遍历即可

五.代码实现

优化后

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> sup;int width = matrix.size();int length = matrix[0].size();int left = 0;int right = length - 1;int top = 0;int bottom = width - 1;while (left <= right && top <= bottom){for (int i = left; i <= right; i++){sup.push_back(matrix[top][i]);}top++;for (int i = top; i <= bottom; i++){sup.push_back(matrix[i][right]);}right--;if (top <= bottom){for (int i = right; i >= left; i--){sup.push_back(matrix[bottom][i]);}bottom--;}if (left <= right){for (int i = bottom; i >= top; i--){sup.push_back(matrix[i][left]);}left++;}}return sup;}
};

优化前

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int wid = matrix.size();int len = matrix[0].size();int crtlen = len;int crtwid = wid;vector<int> ans;bool lefttoright = true;bool toptobottom = true;int lenindex = 0, widindex = 0, i;while (crtlen && crtwid){if (lefttoright){for (i = 0; i < crtlen; i++){ans.push_back(matrix[lenindex][widindex++]);}lenindex++; widindex--;lefttoright = !lefttoright;crtwid--;}else{for (i = 0; i < crtlen; i++){ans.push_back(matrix[lenindex][widindex--]);}lenindex--; widindex++;lefttoright = !lefttoright;crtwid--;}if (toptobottom){for (i = 0; i < crtwid; i++){ans.push_back(matrix[lenindex++][widindex]);}widindex--; lenindex--;toptobottom = !toptobottom;crtlen--;}else{for (i = 0; i < crtwid; i++){ans.push_back(matrix[lenindex--][widindex]);}widindex++;lenindex++;toptobottom = !toptobottom;crtlen--;}}return ans;}
};

六.题目总结

注意溢出判断

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

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

相关文章

C语言葵花宝典之——文件操作

前言&#xff1a; 在之前的学习中&#xff0c;我们所写的C语言程序总是在运行结束之后&#xff0c;就会自动销毁&#xff0c;那如果我们想将一个结果进行长期存储应该如何操作呢&#xff1f;这时候就需要我们用文件来操作。 目录 1、什么是文件&#xff1f; 1.1 程序文件 1.2…

【NC21874】好串

题目 好串 栈的思想 思路 由于每次加入的都是一对字母 a b ab ab&#xff0c;这说明好串一定满足一个性质&#xff1a; 从给定的字符串开始取&#xff0c;每次取一个子串 a b ab ab&#xff0c;到最后字符串一定为空。 这说明有一个 a a a 则必定有一个 b b b 与其配对。…

C语言每日一题—魔幻矩阵

魔幻矩阵 编程实现9*9以内任意奇数阶方阵的魔幻矩阵。 所谓奇数魔幻矩阵就是n*n的矩阵(n为奇数)的n*n个格子中放入数1到n*n&#xff0c;使得每行、每列、主对角线、付对角线上元素的和都相等。算法生成如下&#xff1a;: 1 ,第一个数字在第一行的中间位置 2,以后每一个数放在前…

PyTorch学习笔记之激活函数篇(一)

文章目录 1、Sigmoid函数1.1 公式1.2 对应图像1.2 生成图像代码1.4 优点与不足1.5 torch.sigmoid()函数 1、Sigmoid函数 1.1 公式 Sigmoid函数的公式&#xff1a; f ( x ) 1 1 e − x f(x) \frac{1}{1e^{-x}} f(x)1e−x1​ Sigmoid函数的导函数&#xff1a; f ′ ( x ) e …

Vue 3 + TypeScript 项目中全局挂载并使用工具函数

一、proxy方式 1.封装日期选择工具函数&#xff1a; 在untils文件夹下新建index.ts,并导出工具函数 /*** 获取不同类型日期* param&#xff1a;类型 dateVal: 是否指定*/ export function getSystemDate(param: any, dateVal: any) {let systemDate dateVal ? new Date(da…

【算法篇】七大基于比较的排序算法精讲

目录 排序 1.直接插入排序 2.希尔排序 3.直接选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 排序 排序算法的稳定性&#xff1a;假设在待排序的序列中&#xff0c;有多个相同的关键字&#xff0c;经过排序后&#xff0c;这些关键字的先后顺序不发生改变&#…

编程入行指南:从代码小白到技术大牛的“码农”奇幻漂流

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在这个飞速发展的信息时代&#xff0c;技术不断推陈出新&#xff0c;程序员若想保持行业翘楚地位&#xff0c;必须持续汲取新知、…

经典机器学习模型(一)感知机模型

经典机器学习模型(一)感知机模型 感知机可以说是一个相当重要的机器学习基础模型&#xff0c;是神经网络和支持向量机的基础。 感知机是一个二分类的线性分类模型&#xff0c;之所以说是线性&#xff0c;是因为它的模型是线性形式的。 从《统计学习方法》中&#xff0c;我们…

Docker Compose基本配置及使用笔记

Docker Compose基本配置及使用笔记 简介 Docker Compose 是一个用于定义和运行多个 Docker 容器应用程序的工具。它使用 YAML 文件来配置应用程序的服务&#xff0c;并通过简单的命令集管理这些服务的生命周期。 1.步骤1 代码如下&#xff1a;docker-compose.yml放在虚拟机roo…

前端项目,个人笔记(一)【Vue-cli - 定制化主题 + 路由设计】

目录 1、项目准备 1.1、项目初始化 1.2、elementPlus按需引入 注&#xff1a;使用cnpm安装elementplus及两个插件&#xff0c;会报错&#xff1a;vueelement-plus报错TypeError: Cannot read properties of null (reading isCE ) &#xff0c;修改&#xff1a; 测试&#…

Swin—Transformer学习笔记

一、网络框架 二、Patch Merging 图像长和宽减半&#xff0c;通道数增加一倍 三、W-MSA 目的&#xff1a;减少计算量 缺点&#xff1a;窗口之间无法进行信息交互 四、SW-MSA 目的&#xff1a;实现不同window之间的信息交互 为了不增加计算量&#xff0c;移动window并增加Ma…

python多进程数据共享

一、数据共享简介 multiprocessing.Manager 是 Python 的 multiprocessing 模块中的一个类&#xff0c;它提供了一种方便的方法来创建共享对象&#xff0c;这些共享对象可以被多个进程安全地访问和修改。使用 Manager 可以解决多进程并发访问共享资源时的同步问题。 二、常用…

HarmonyOS ArkTS 渲染控制概述 if/else:条件渲染

ArkUI通过自定义组件的build()函数和builder装饰器中的声明式UI描述语句构建相应的UI。在声明式描述语句中开发者除了使用系统组件外&#xff0c;还可以使用渲染控制语句来辅助UI的构建&#xff0c;这些渲染控制语句包括控制组件是否显示的条件渲染语句&#xff0c;基于数组数据…

【数据结构】二叉树OJ题(C语言实现)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

【C#】int+null=null

C#语法&#xff0c;这玩意不报错 intnullnull&#xff0c;有点不合逻辑 (Int32)(bizRepair0rder.CreateTime. Value - regues.Mlodifylime.Value).TotalMinutes (Int32)(bizRepair0rder.CreateTime. Value - reques.llodifylime.Value).TotalMinutes nullstring是引用类型&…

机器学习-04-分类算法-03KNN算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法与knn算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化…

冲动是魔鬼,工作不顺心时不要把坏脾气带给家人

今天与一个跟踪了很久的客户准备签合同了&#xff0c;客户突然反悔&#xff0c;为此与他周旋了一整天&#xff0c;忙碌得一口水都没有喝。回到小区坐在车里抽着烟&#xff0c;久久不愿回家&#xff0c;只想一个人坐着&#xff0c;疲惫、无奈。这个月的奖金似乎又将成为泡影。 …

AI - 决策树模型

&#x1f914;决策树算法 决策树的思想来源可以追溯到古希腊时期&#xff0c;当时的哲学家们就已经开始使用类似于决策树的图形来表示逻辑推理过程。然而&#xff0c;决策树作为一种科学的决策分析工具&#xff0c;其发展主要发生在20世纪。 在20世纪50年代&#xff0c;美国兰…

Machine Vision Technology:Lecture5 Local feature:Corners角点

Machine Vision Technology&#xff1a;Lecture5 Local feature&#xff1a;Corners角点 Motivation&#xff1a;panorama stitching全景图拼接提取良好特征Feature points applications特征点应用Finding Corners找角点Corner Detection&#xff1a;Basic Idea角点检测基本思想…

BeanPostProcessor子类中无法使用@GrpcClient或者@Autowired注入普通bean

BeanPostProcessor子类中无法使用GrpcClient或者Autowired注入普通bean 原因分析&#xff1a; 在Spring框架中&#xff0c;BeanPostProcessor 是一种特殊的bean&#xff0c;它的主要职责是在容器标准初始化流程前后对其他bean进行额外的预处理或后处理。BeanPostProcessor 的…