54. 螺旋矩阵【 力扣(LeetCode) 】

news2024/9/25 13:25:06

一、题目描述

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

三、解题思路

  1. 基本思路:
      一力破万法,就是按照螺旋矩阵的方式添加元素到向量中。
  2. 具体思路:
    • 定义:constrain 表示四个方向的界限,其中 up 和 left 初始为 0 ,down 和 right 初始为 n-1 和 m-1 ;ans 用于存放答案。
    • 遍历:
      • 往右:把 left 到 right 的元素依次添加到 ans 中,然后这一排的元素都添加完了,up++ 。
      • 往下:把 up 到 down 的元素依次添加到 ans 中,然后这一列的元素都添加完了,right-- 。顺便判断是否结束。
      • 往左:把 right 到 left 的元素依次添加到 ans 中,然后这一排的元素都添加完了,down-- 。
      • 往上:把 down 到 up 的元素依次添加到 ans 中,然后这一列的元素都添加完了,left++ 。顺便判断是否结束。
    • 返回结果 ans 。

四、参考代码

时间复杂度: O ( n m ) \Omicron(nm) O(nm)
空间复杂度: O ( 1 ) \Omicron(1) O(1)

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        int n = matrix.size(), m = matrix[0].size(), len = n * m;
        int d = 0;
        vector<int> ans;
        map<string, int> constrain = {{"up", 0}, {"down", n - 1}, {"left", 0}, {"right", m - 1}};

        while (true) {
            for (int j = constrain["left"]; j <= constrain["right"]; j++) {  // 往右
                ans.push_back(matrix[constrain["up"]][j]);
            }
            constrain["up"]++;
            for (int j = constrain["up"]; j <= constrain["down"]; j++) {    // 往下
                ans.push_back(matrix[j][constrain["right"]]);
            }
            constrain["right"]--;
            if (constrain["left"] > constrain["right"] || constrain["up"] > constrain["down"]) {
                break;
            }
            
            for (int j = constrain["right"]; j >= constrain["left"]; j--) {    // 往左
                ans.push_back(matrix[constrain["down"]][j]);
            }
            constrain["down"]--;
            for (int j = constrain["down"]; j >= constrain["up"]; j--) {    // 往上
                ans.push_back(matrix[j][constrain["left"]]);
            }
            constrain["left"]++;
            if (constrain["left"] > constrain["right"] || constrain["up"] > constrain["down"]) {
                break;
            }
        }

        return ans;
    }
};

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

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

相关文章

软件测试——自动化测试selenium

自动化测试 测试人员编写自动化测试脚本&#xff0c;维护并解决自动化脚本问题 自动化的主要目的就是用来进行回归测试 回归测试 常见面试题 ⾃动化测试能够取代人工测试吗&#xff1f; ⾃动化测试不⼀定⽐人工测试更能保障系统的可靠性&#xff0c;⾃动化测试是测试⼈员手…

图论 最短路

文章目录 单源最短路朴素Dijkstra代码 堆优化Dijkstra代码 Bellman-ford代码 spfaspfa求最短路代码 spfa判断负环代码 多源最短路Floyd代码 单源最短路 朴素Dijkstra 给定一个 n n n 个点 m m m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;所有边权均为正…

vscode 阅读linux内核(vscode+clangd)

此插件曾在vim里用过&#xff0c;非常好用。 首先先在vscode 里下载clangd插件 这只是客户端&#xff0c;还需下载个服务器&#xff08;这在coc插件里也有说明&#xff09; sudo apt install clangd 下载完后可以 clangd --version 查看版本信息&#xff0c;如果能查看&#x…

回归预测|基于灰狼GWO优化BP神经网络多输入多输出的数据回归预测Matlab程序GWO-BP 含预测新数据程序

回归预测|基于灰狼GWO优化BP神经网络多输入多输出的数据回归预测Matlab程序GWO-BP 含预测新数据程序 文章目录 前言回归预测|基于灰狼GWO优化BP神经网络多输入多输出的数据回归预测Matlab程序GWO-BP 含预测新数据程序 一、GWO-BP多输出模型1. 原理2. GWO-BP模型流程步骤1: 初始…

jenkins最佳实践(一):jenkins安装与部署

各位小伙伴们大家好呀&#xff0c;我是小金&#xff0c;下面我将记录学习jenkins的系列文章与心得&#xff0c;一方面用于博主的自我记录&#xff0c;一方面如果能帮助到正在浏览这篇文章的小伙伴&#xff0c;那更好不过了&#xff0c;本篇文章主要讲述jenkins的安装以及安装je…

已经30岁了,想转行从头开始现实吗?什么样的工作算好工作?

我是29岁那年&#xff0c;完成从转行裸辞副业的职业转型。 如果你把职业生涯看成是从现在开始30岁&#xff0c;到你退休那年&#xff0c;中间这么漫长的30年&#xff0c;那么30岁转行完全来得及&#xff1b; 如果你觉得必须在什么年纪&#xff0c;什么时间内必须完成赚到几十…

框架——MyBatis查询(单表查询,多表联查)

目录 1.单表查询 2.多表查询 想查询student并且查询student所选择的专业major ①通过id查一个 ②不传入值直接查所有的学生列表 ③嵌套查询 想查询专业major并且查询该专业被哪些学生student选择 ①通过id查一个 ②不传入值直接查所有的专业列表 ③嵌套查询 3. 设置自动…

webpack打包优化方案

调试工具&#xff1a;安装webpack-bundle-analyzer打包可视化工具&#xff0c;可以看到打包文件大小&#xff0c;从而有针对性的优化。 npm install --save-dev webpack-bundle-analyzer。 方案一&#xff1a;将第三方依赖包使用cdn进行引入减小文件包体积&#xff08;例&…

Unity 编辑器-UGUI拓展Button,一个和原Button一样按钮⭐

拓展Button 需求实现1.创建继承自Button的类2.处理Inspector 显示问题3.处理在prafab中和hierarchy中创建按钮4.处理一些细节 完成 需求 想拓展一下UGUI的Button,找了几个帖子&#xff0c;只是能实现功能&#xff0c;但是用起来总有些不尽人意的地方&#xff0c;想办法处理一下…

针对防火墙IPSec业务不通或业务丢包问题,防火墙如何做流量统计、远程抓包、报文示踪

问题描述 针对防火墙IPSec业务不通或业务丢包问题&#xff0c;防火墙如何做流量统计、远程抓包、报文示踪 解决方案 1&#xff09;配置流统和远程抓包用的ACL&#xff1b; system [sysname] acl 3555 [sysname-acl-adv-3555] rule permit icmp source 10.82.100.215 0 destin…

Vue实现表格数据的增删改查

整体效果图&#xff1a; 一、创建表格数据 效果图&#xff1a; el-table组件&#xff1a;表格组件 <el-table:data"dataList"borderv-loading"dataListLoading"selection-change"selectionChangeHandle"style"width: 100%;">&l…

KISS(Keep It Sample,Stupid)[完整代码]

根据KISS原文它的伪随机数产生器的Period about 2^123&#xff0c;周期很长&#xff0c;并且来自于多个产生器的共同作用之下而得&#xff0c; 原文的这这句话很有意思&#xff0c;&#xff08;车轱辘压我脸上了&#xff09;一个人不好的时候&#xff0c;试一试两个人&#xff…

线段树的原理

1.如果知道两个子范围上的最值&#xff0c;通过比较就可以知道整个范围上的最值 2.如果知道两个子范围上分别出现的次数最多的数&#xff0c;但无法知道整个范围上出现最多的数 范围修改logn的前提&#xff1a;如果维护的是区域和&#xff0c;要把区域上的每个数字加上a&#…

【蓝桥杯集训100题】scratch绘制扇子 蓝桥杯scratch比赛专项预测编程题 集训模拟练习题第28题

scratch绘制扇子 蓝桥杯集训100题第28题模拟练习解析 此题曾经作为第十届省赛的真题考过 一、题目要求 以坐标&#xff08;0,0&#xff09;点为中心绘制一把扇子&#xff1b;扇面和扇把都是三分之一圆&#xff0c;扇面的半径 为 100 左右&#xff0c;扇把的半径为 20 左右。…

HTML实现2048小游戏

游戏概述 实现一个基本的2048游戏涉及综合运用HTML、CSS和JavaScript这三种关键技术。 HTML用于构建游戏的结构框架&#xff0c;包括游戏容器、网格布局以及可能的用户交互元素&#xff08;如按钮或得分显示&#xff09;。 CSS则负责美化游戏界面&#xff0c;通过样式表定义网格…

培训班和科班出生有什么区别

IT业的萌新来啦 每到毕业季 总有大量萌新走进职场 IT圈子的程序员 有的是科班出生 比如 计算机科学与技术、软件工程、大数据技术 有的是相关专业出生的 比如 信息安全、网络工程、物联网工程等等 除此之外 还有各种其他专业转行过来的 文理不限、专业不限 科班出生…

mydump 文件拆分 mysqldumpsplitter

mydump 文件拆分 如何将mysqldump的输出拆分为较小的文件&#xff1f; 要将mysqldump的输出拆分为较小的文件&#xff0c;可以使用–max-allowed-packet和–single-transaction选项。 使用–max-allowed-packet选项设置每个查询允许的最大数据包大小。这将确保mysqldump在执行…

精通 Stable Diffusion 调优秘籍

一、Stable Diffusion 调优概览 Stable Diffusion 作为一款强大的 AI 绘画工具&#xff0c;其调优具有至关重要的意义。通过合理的调优&#xff0c;可以显著提升图像生成的质量、速度和准确性&#xff0c;满足用户更加多样化和精细化的需求。 调优主要涵盖了多个方面。首先是模…

鸿蒙(API 12 Beta3版)【使用Image完成图片解码】图片开发指导依赖JS对象

图片解码指将所支持格式的存档图片解码成统一的[PixelMap]&#xff0c;以便在应用或系统中进行图片显示或[图片处理]。当前支持的存档图片格式包括JPEG、PNG、GIF、WebP、BMP、SVG、ICO、DNG。 开发步骤 添加依赖 在进行应用开发之前&#xff0c;开发者需要打开native工程的…

YOLOv5改进 | 融合改进 | C3 融合Efficient Multi-Scale Conv提升检测效果

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 改…