HOT19-螺旋矩阵

news2024/12/24 4:31:05

    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]

解题方法: 按照右->下->左->上的方向,依次遍历数组中没有遍历过的元素,每遍历完一个方向,就将对应的边界缩小。用一个变量total_num来记录当前还有多少元素没有遍历,每遍历一个元素,total_num的值减1,直到所有的元素都被遍历过即可。

C++代码

#include <iostream>
#include <vector>
class Solution {
public:
    std::vector<int> spiralOrder(std::vector<std::vector<int>>& matrix) {
        int m = matrix.size(); //行数
        int n = matrix[0].size(); //列数
        int left = 0;
        int right = n - 1;
        int up = 0;
        int down = m - 1;
        std::vector<int> result; //结果数组
        int total_num = m * n;//表格中总共有多少元素
        while (total_num > 0) {
            // 向右:遍历当前最上层
            for (int j = left; j <= right && total_num > 0; j++) { //total_num>0的条件不能少,否则可能存在重复遍历
                result.emplace_back(matrix[up][j]);
                total_num--;
            }
            ++up; // 上边界下移
            // 向下:遍历当前最右列
            for (int i = up; i <= down && total_num > 0; i++) { //total_num>0的条件不能少,否则可能存在重复遍
                result.emplace_back(matrix[i][right]);
                total_num--;
            }
            --right;//右边界左移
            // 向左:遍历当前最下面行
            for (int j = right; j >= left && total_num > 0 ; j-- ) {//total_num>0的条件不能少,否则可能存在重复遍
                result.emplace_back(matrix[down][j]);
                total_num--;
            }
            --down; //下边界上移
            // 向上:遍历当前最左边列
            for (int i = down; i >= up && total_num > 0; i--) {//total_num>0的条件不能少,否则可能存在重复遍
                result.emplace_back(matrix[i][left]);
                total_num--;
            }
            ++left;//左边界右移
        }
        return result;
    }
};

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

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

相关文章

通过USB和wifi连接真机编写第一个脚本

目录 一、连接手机 1、通过usb数据线连接手机 2、无线连接手机 二、编写第一个脚本 一、连接手机 1、通过usb数据线连接手机 数据线连接手机并允许调试 cmd命令行执行&#xff1a; adb devices 如果没有显示device信息&#xff0c;请检查&#xff1a; 手机是否开启usb调…

element的时间控件默认值为当前时间

vue代码 <el-form-item label"验收时间" prop"checkAcceptTime"><el-date-picker clearablev-model"form.checkAcceptTime"type"datetime"value-format"yyyy-MM-dd HH:mm:ss"placeholder"请选择验收时间"…

微信发布新规:这功能,要收费了

近日&#xff0c;微信小程序发布《关于手机号快速验证组件升级及收费的通知》&#xff0c;通知中指出&#xff1a;手机号验证能力在原有基础上&#xff0c;新增手机号实时验证能力。 同时&#xff0c;为了平衡技术服务与运营成本&#xff0c;平台将于2023年8月26日起对手机号验…

SQL Server,想要查询某表数据,但表名存放在别的表内,SQL语句怎么写?

动态SQL查询案例 需求描述&#xff1a; 原始的表名、表的属性描述信息在summary表中&#xff0c;每个表有类似的字段&#xff1a;id、price、size&#xff0c;通过SQL能查询到所有表的如下记录&#xff1a; 表名、表属性名、最低价格、最低价格对应ID、最大尺寸、最大尺寸对应…

Linux学习之yum安装软件

要是使用rpm安装软件&#xff0c;就需要自己解决依赖包的安装&#xff0c;使用yum进行安装&#xff0c;就可以自动安装依赖包。可以先到阿里云CentOS 镜像网站学习一下如何更改yum源。我这里演示如何更改yum源。 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS…

人像美白的python实现

人像美白在现在的美颜功能里面几乎属于必备的&#xff0c;各家的方案都不太一致&#xff0c;本文主要介绍一种基于肤色分割的人像美白方案。 首先得将人像进行皮肤分割&#xff0c;具体最好是使用AI模型&#xff0c;这里就不展开了&#xff0c;本人侧重点是美白算法&#xff0c…

数据库实验-图书销售管理系统数据库SQL应用编程

一、实验一&#xff1a;图书销售管理系统数据库SQL应用编程 二、实验时间&#xff1a;2023.4.21 三、实验目的 结合图书销售管理系统数据库开发项目案例&#xff0c;开展数据库SQL应用编程实践&#xff0c;培养数据库SQL操作访问、存储过程与触发器处理的数据库编程能力…

(学习日记)2023.04.29

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

从小白到大神之路之学习运维第44天---第三阶段----mysql数据库的主从复制和读写分离

第三阶段基础 时 间&#xff1a;2023年6月28日 参加人&#xff1a;全班人员 内 容&#xff1a; mysql主从复制和读写分离 目录 一、mysql基础 &#xff08;一&#xff09;优点&#xff1a; &#xff08;二&#xff09;类型&#xff1a; &#xff08;三&#xff09;支…

前缀例题(一维二维)

​作者&#xff1a;小妮无语 专栏&#xff1a;暑假基础集训营 &#x1f6b6;‍♀️✌️道阻且长&#xff0c;不要放弃✌️&#x1f3c3;‍♀️ 目录 一维前缀和 二维前缀和 例题1&#xff1a;最大子矩阵 例题2&#xff1a; 激光炸弹 一维前缀和 本题唯一要注意的是数据范…

爬虫工具-替换js文件ReRes插件/Gores插件

目录 一、ReRes插件二、Gores插件 一、ReRes插件 用途&#xff1a;爬虫逆向过程中一些文件需要替换时 ① 原始网站js文件有无限debugger&#xff0c;复制原始网站js文件&#xff0c;删掉无限debugger相关代码保存为新的js文件&#xff1b;用ReRes插件进行替换② 原始网站js文件…

Xcode 14打包flutter 的项目构建失败

升级xcode 后flutter项目构建失败 起因&#xff1a; 升级Xcode 到新的14.3.1版本 错误&#xff1a; showing recent issues command phasescriptexecution failed with a nonzero exit code 这个错误很多情况下都会出现&#xff0c;所以参考价值较低。 解决&#xff1a; …

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 企业员工招聘系统的设计与实现

一.项目介绍 招聘系统将为招聘者和求职者构建一个功能齐全、方便快捷的招聘平台&#xff0c;减少双方投入招聘活动的成本&#xff0c;为招聘求职双方带来便利&#xff0c; 系统将实现如下目标&#xff1a; 1.针对系统内的不同角色&#xff0c;系统能够赋予其不同的操作权限。 …

有了HTTP,为什么还要RPC?

很长时间以来都没有怎么好好搞清楚 RPC&#xff08;即 Remote Procedure Call&#xff0c;远程过程调用&#xff09;和 HTTP 调用的区别&#xff0c;不都是写一个服务然后在客户端调用么&#xff1f;这里请允许我迷之一笑~Naive&#xff01; 本文简单地介绍一下两种形式的 C/S…

粒子群算法PSO优化VMD,适应度函数为最小样本熵或最小包络熵(可自行选择,代码已集成好,很方便修改)包含MATLAB源代码

近期评论区有小伙伴私信需要粒子群优化算法PSO法化VMD的&#xff0c;所以打算再写一篇。 与上一篇灰狼算法优化VMD相似&#xff0c;这篇文章也是以最小样本熵或最小包络熵为适应度函数的&#xff0c;好的&#xff0c;废话不多说&#xff0c;大家不懂得可以看这篇文章。灰狼优化…

《TCP IP网络编程》

2023.6.28 正式开始学习网络编程。 每一章每一节的笔记都会记录在博客中以便复习。 第1章 1.1理解网络编程和套接字 网络编程又叫套接字编程。所谓网络编程&#xff0c;就是编写程序使两台连网的计算机相互交换数据。 为什么叫套接字编程&#xff1f; 我们平常将插头插入插座上…

QT中把QWidget提升为自定义控件后样式表无效的原因

按照QT帮助手册的描述&#xff0c;当我们继承QWidget写了自己的类以后&#xff0c;必须要覆盖重写painterEvent函数。否则自定义类的样式表就不能生效。 这一点要切记。当你想继承QWidget时&#xff0c;不如直接继承上图的CustomWidget或者QFrame。 换句话说&#xff0c;永远不…

NXP i.MX 8M Mini的视频开发案例分享 (下)

本文主要介绍i.MX 8M Mini的视频开发案例&#xff0c;包含基于GStreamer的视频采集、编解码、算法处理、显示以及存储案例&#xff0c;GigE工业相机测试说明&#xff0c;H.265视频硬件解码功能演示说明等。 注&#xff1a;本案例评估版采用的是创龙科技TLIMX8-EVM&#xff0c;…

真的好用吗?鲜有人提的 RabbitMQ-RPC模式

RabbitMQ系列文章 手把手教你&#xff0c;本地RabbitMQ服务搭建&#xff08;windows&#xff09; 消息队列选型——为什么选择RabbitMQ RabbitMQ灵活运用&#xff0c;怎么理解五种消息模型 RabbitMQ 能保证消息可靠性吗 推或拉&#xff1f; RabbitMQ 消费模式该如何选择 死信是…

2023年3季度广州/深圳DAMA-CDGA/CDGP数据治理认证招生

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…