19 螺旋矩阵

news2025/2/28 23:14:09

螺旋矩阵

    • 题解1 循环(4个标志——根据顺时针)
    • 题解2 方向

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

在这里插入图片描述
提示:

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

题解1 循环(4个标志——根据顺时针)

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        const int row = matrix.size();
        const int column = matrix[0].size();
        vector<int> res;
        int i(0), j (0), startR(0), endR(column-1), startC(0), endC(row-1);
        while(startC <= endC){
            
            i = startC;
            j = startR;
            
            if(j <= endR){
                while(j <= endR)
                // i = startC
                res.push_back(matrix[i][j++]);
                startC ++;
                i ++;
            }else break;
            
            if(i <= endC){
                j = endR;
                while(i <= endC)
                    // j = endR
                    res.push_back(matrix[i++][j]);
                endR --;
                j --;
            }else break;
            
            if(j >= startR){
                i = endC;
                while(j >= startR)
                    // i = endC
                    res.push_back(matrix[i][j--]);
                endC --;
                i --;
            }else break;
            
            if(i >= startC){
                j = startR;
                while(i >= startC)
                // j = startR
                    res.push_back(matrix[i--][j]);
                startR ++;
            }else break;
        }

        return res;
    }
};

在这里插入图片描述

题解2 方向

class Solution {
private:
// 向右、向下、向左、向上
    static constexpr int directions[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        if (matrix.size() == 0 || matrix[0].size() == 0) {
            return {};
        }
        
        int rows = matrix.size(), columns = matrix[0].size();
        vector<vector<bool>> visited(rows, vector<bool>(columns));
        int total = rows * columns;
        vector<int> order(total);

        int row = 0, column = 0;
        int directionIndex = 0;
        // 终止条件是 元素数目
        for (int i = 0; i < total; i++) {
            order[i] = matrix[row][column];
            visited[row][column] = true;
            int nextRow = row + directions[directionIndex][0], nextColumn = column + directions[directionIndex][1];
            if (nextRow < 0 || nextRow >= rows || nextColumn < 0 || nextColumn >= columns || visited[nextRow][nextColumn]) {
                directionIndex = (directionIndex + 1) % 4;
            }
            row += directions[directionIndex][0];
            column += directions[directionIndex][1];
        }
        return order;
    }
};

在这里插入图片描述

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

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

相关文章

LVS NAT模式负载均衡群集部署

目录 1 群集(集群) cluster 1.1 群集的类型 2 LVS的工作模式及其工作过程 2.1 NAT模式&#xff08;VS-NAT&#xff09; 2.2 直接路由模式&#xff08;VS-DR&#xff09; 2.3 IP隧道模式&#xff08;VS-TUN&#xff09; 3 LVS-NAt 模式配置步骤 3.1 部署共享存储 3.2 配…

【全网最全protobuf中文版教程】

protocal buffer Notes 文章目录 protocal buffer Notes为什么是ProtoBufprotoBuf数据要素字段编号标签字段类型标量枚举复合类型mapgroup 导入其他消息类型编码解码编码解码 proto生成文件 为什么是ProtoBuf 通常&#xff0c;程序运行时产生的一些结构化数据会经历存储或者与…

基于Java+SpringBoot+Vue校园求职招聘系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

docker系列(2) - 常用命令篇

文章目录 2. docker常用命令2.1 参数说明(tomcat案例)2.2 基本命令2.3 高级命令2.4 其他 2. docker常用命令 2.1 参数说明(tomcat案例) 注意如果分成多行&#xff0c;\后面不能有空格 # 拉取运行 docker run \ -d \ -p 8080:8080 \ --privilegedtrue \ --restartalways \ -m…

docker系列(5) - docker仓库

文章目录 5 docker仓库5.1 创建命名空间5.2 创建镜像仓库5.3 设置访问凭证5.3 镜像仓库命令信息5.4 登录阿里云上传镜像5.5 拉取镜像运行5.6 私有仓库(docker Registry)5.6.1 安装docker registry5.6.2 准备镜像5.6.2 本地私服仓库5.6.3 推送到私服仓库5.6.4 拉取私服镜像 5 do…

信息系统项目管理师(第四版)教材精读思维导图-第十三章项目资源管理

请参阅我的另一篇文章&#xff0c;综合介绍软考高项&#xff1a; 信息系统项目管理师&#xff08;软考高项&#xff09;备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图源文件 13.1 管理基础 13.2 管理过程 13.3 规划资源管理 13.4 估算活动资源 13.5…

2023/9/10周报

目录 摘要 文献阅读1 1、标题和提出问题 2、小波变换 3、Encoder和Decoder 4、模型结构 5、实验 文献阅读2 1、标题和提出问题 2、高斯扩散模型和烛台图 3、研究方法 4、实验准备 5、实验结果 总结 摘要 本周阅读了两篇论文&#xff0c;其一为一种基于空气质量时…

数字图像滤波的本质

一、说明 在数字时代&#xff0c;图像是我们交流和表达不可或缺的一部分。从社交媒体到医学成像&#xff0c;图像的质量和内容非常重要。这就是图像过滤和卷积领域介入的地方&#xff0c;为我们提供了一个转换和完善这些视觉叙事的工具包。 图像过滤不仅仅是让照片看起来更好;这…

浙大MBA二战上岸:笔试备考辛酸路

作为一个即将进入三十而立年纪的考生&#xff0c;我深切感受到了压力的存在。在决定是否要将这么多时间和精力投入到考研中时&#xff0c;我开始思考这决定是否值得。毕竟参加二战考试需要付出大量的时间成本和努力。最终经过反复权衡和深思熟虑&#xff0c;我认为这是值得的。…

总结 - 组件通用封装思路(组件封装)

组件封装&#xff1a; 1. 不变&#xff1b; 2. 变&#xff1a;①prop ②slot插槽 详细总结在文末。 --------------------------------------------------------------------------------------------------- 问题&#xff1a;结构相似&#xff0c;内容不同 --》 可以用组…

注意力机制讲解与代码解析

一、SEBlock(通道注意力机制) 先在H*W维度进行压缩&#xff0c;全局平均池化将每个通道平均为一个值。 &#xff08;B, C, H, W&#xff09;---- (B, C, 1, 1) 利用各channel维度的相关性计算权重 (B, C, 1, 1) --- (B, C//K, 1, 1) --- (B, C, 1, 1) --- sigmoid 与原特征相…

【Linux】粗谈权限

背景知识 我们日常口头讲的Linux操作系统&#xff0c;狭义来说只是指它的内核&#xff0c;广义上来说指它的内核加外壳&#xff08;shell&#xff0c;配套的程序&#xff09;。 那么为什么一定要有外壳呢&#xff1f;shell外壳主要有以下两个功能 1.命令行解释器 将用户输入的…

趣解设计模式之《办理入职这么难吗?》

〇、小故事 小王大学毕业&#xff0c;经过大学期间的刻苦学习&#xff0c;终于成功的面试上了一家公司。按照约定的时间&#xff0c;小王兴高采烈的来到公司前台去办理入职手续。 “您好&#xff0c;我是来办理入职手续的”小王对前台妹妹说&#xff0c;前台妹妹看都没看他一…

管理类联考——数学——汇总篇——知识点突破——路程

⛲️ 路程问题是根据速度、时间、路程之间的关系&#xff0c;研究物体相向、相背和同向运动的问题&#xff0c;解决路程问题常用方法&#xff1a; &#xff08;1&#xff09;分解。将综合性的题目先分解成若干个基本题&#xff0c;再按其所属类型&#xff0c;直接利用基本数量…

SpringBoot结合MyBatis实现多数据源配置

SpringBoot结合MyBatis实现多数据源配置 一、前提条件 1.1、环境准备 SpringBoot框架实现多数据源操作&#xff0c;首先需要搭建Mybatis的运行环境。 由于是多数据源&#xff0c;也就是要有多个数据库&#xff0c;所以&#xff0c;我们创建两个测试数据库&#xff0c;分别是…

Alibaba(获得店铺的所有商品) API接口

为了进行电商平台 的API开发&#xff0c;首先我们需要做下面几件事情。 1&#xff09;开发者注册一个账号 2&#xff09;然后为每个alibaba应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载alibaba API的SDK并掌握基本的API基础知识和调用 4&#xff09;利…

持安-大连万达集团零信任项目入选中国信通院2023零信任优秀案例

2023年8月25日&#xff0c;以“链接云端&#xff0c;可信而安”为主题的“2023首届SecGo云和软件安全大会”在京隆重召开。会上&#xff0c;中国信息通信研究院重磅揭晓了“安全守卫者计划”优秀案例评选结果。 零信任办公安全技术创新企业持安科技&#xff0c;与用户大连万达…

SpringBoot整合MQTT(MqttClient)

一、SpringBoot整合MQTT 创建项目&#xff0c;引入 MQTT依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version></dep…

java读取jar包中的程序版本号

java程序打包后的jar如下图所示&#xff1a; 可以看到META-INF目录下的三处均可以读取到程序的版本号&#xff1a; MANIFEST.MFbuild-info.propertiesmaven/xxx/xx/pom.properties 或 pom.xml 一、MANIFEST.MF 程序版本号字段 即 Implementation-Version Manifest-Version:…

【Java】之继承

Java中使用extends关键字&#xff0c;让我们在类和类之间建立联系。 使用继承的好处&#xff1a; 可以将多个类中重复的代码&#xff0c;抽象至父类中供子类使用。 子类可以在父类上的基础上继续增强&#xff0c;使子类可以有自己独特的性质和功能。 特点&#xff1a; 在J…