小阳同学刷题日记-54. 螺旋矩阵

        题目:给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

        思路:

  1. 初始化四个边界指针:top, bottom, left, right 分别表示当前螺旋遍历的上边界、下边界、左边界和右边界。
  2. 不断遍历矩阵直到所有元素都被访问过为止。在每一轮遍历中,依次遍历当前边界的元素,并将其加入结果数组中。
  3. 遍历完当前边界后,将相应的边界指针向内收缩(即对应边界向内移动一步),并检查是否还有剩余的行和列可供遍历。

        步骤: 

  1. 初始化 top = 0, bottom = m - 1, left = 0, right = n - 1
  2. 不断循环直到 top > bottom 或者 left > right
  • 遍历上边界:从 leftright
  • 遍历右边界:从 top + 1bottom
  • 遍历下边界:当 top < bottom 时,从 rightleft
  • 遍历左边界:当 left < right 时,从 bottom - 1top + 1
  • 更新边界指针:top++, bottom--, left++, right--

        代码:

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> result; // 存储结果的数组

        if (matrix.empty()) return result; // 处理空矩阵的情况,直接返回空数组

        int m = matrix.size(); // 矩阵的行数
        int n = matrix[0].size(); // 矩阵的列数

        int top = 0, bottom = m - 1; // 上边界和下边界的初始值
        int left = 0, right = n - 1; // 左边界和右边界的初始值

        // 按照顺时针螺旋顺序遍历矩阵
        while (top <= bottom && left <= right) {
            // 从左到右填入数字
            for (int j = left; j <= right; ++j) {
                result.push_back(matrix[top][j]);
            }
            top++; // 上边界向下移动一行

            // 从上到下填入数字
            for (int i = top; i <= bottom; ++i) {
                result.push_back(matrix[i][right]);
            }
            right--; // 右边界向左移动一列

            // 检查是否还有剩余的行和列
            if (top <= bottom && left <= right) {
                // 从右到左填入数字
                for (int j = right; j >= left; --j) {
                    result.push_back(matrix[bottom][j]);
                }
                bottom--; // 下边界向上移动一行
            }

            if (top <= bottom && left <= right) {
                // 从下到上填入数字
                for (int i = bottom; i >= top; --i) {
                    result.push_back(matrix[i][left]);
                }
                left++; // 左边界向右移动一列
            }
        }

        return result; // 返回顺时针螺旋顺序遍历的矩阵元素结果数组
    }
};

        下面这个解法是在LeetCode上面看到的:

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector <int> ans;
        if(matrix.empty()) return ans; //若数组为空,直接返回答案
        int u = 0; //赋值上下左右边界
        int d = matrix.size() - 1;
        int l = 0;
        int r = matrix[0].size() - 1;
        while(true)
        {
            for(int i = l; i <= r; ++i) ans.push_back(matrix[u][i]); //向右移动直到最右
            if(++ u > d) break; //重新设定上边界,若上边界大于下边界,则遍历遍历完成,下同
            for(int i = u; i <= d; ++i) ans.push_back(matrix[i][r]); //向下
            if(-- r < l) break; //重新设定有边界
            for(int i = r; i >= l; --i) ans.push_back(matrix[d][i]); //向左
            if(-- d < u) break; //重新设定下边界
            for(int i = d; i >= u; --i) ans.push_back(matrix[i][l]); //向上
            if(++ l > r) break; //重新设定左边界
        }
        return ans;
    }
};

作者:YouLookDeliciousC
链接:https://leetcode.cn/problems/spiral-matrix/solutions/7155/cxiang-xi-ti-jie-by-youlookdeliciousc-3/
来源:力扣(LeetCode)

谢谢大家,继续努力! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows虚拟主机上多个域名访问同一个网站

近日老板提出了想要多个域名访问同一个网站的想法。这边了解后&#xff0c;由于我们公司使用的是Hostease的Windows虚拟主机产品&#xff0c;因此咨询了Hostease的技术支持&#xff0c;寻求帮助了解到可以实现Windows主机上多个域名访问同一个网站&#xff0c;是需要进入Window…

win10如何移除此电脑下的“网络”

1.按住winr,然后输入regedit打开注册表&#xff0c;在导航栏输入&#xff0c;定位到ShellFolder文件夹 HKEY_CLASSES_ROOT\CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\ShellFolder2.更改权限&#xff0c;在ShellFolder文件夹上右键选择权限->高级->更改->输入Adm…

antd vue table控件的使用(三)

今天就讲讲Ant Design Vue下的控件----table表格&#xff08;分页、编辑和删除功能&#xff09; 结合项目中的需求&#xff0c;看看如何配置,让table即可以展示列表&#xff0c;又可以直接编辑数据。需求&#xff1a; &#xff08;1&#xff09;展示即将检查的数据列表&#…

通过WebShell登录SQL Server主机并使用SSRS报表服务

背景信息 RDS SQL Server提供了WebShell功能&#xff0c;允许用户通过Web界面登录到RDS SQL Server实例的操作系统中&#xff0c;并在该操作系统中执行命令、上传下载文件等操作。WebShell功能方便用户对RDS SQL Server实例的管理和维护&#xff0c;特别是在无法使用SSH客户端的…

FlashAttention V1 学习笔记

Flash Attention 是一种新型的注意力机制&#xff0c;旨在解决传统 Transformer 模型在处理长序列数据时面临的计算和内存效率问题。它通过一系列创新的技术优化&#xff0c;显著提高了注意力机制的计算速度和内存使用效率&#xff0c;同时保持了精确的结果&#xff0c;不依赖于…

超好用的iframe的postMessage穿参

前言 ❝ 跨域&#xff0c;简单来说是指不同域之间相互请求资源&#xff0c;例如AJAX请求&#xff0c;浏览器根据同源策略对响应结果进行拦截&#xff0c;这是浏览器对JavaScript实施的安全限制。所谓同源是指相同的域名、协议和端口&#xff0c;只要其中一项不同就为跨域 ❞ 背…

C++11异常:到底是怎么个异常

目录​​​​​​​ 一、C/C如何处理错误 1.1C语言传统的处理错误的方式 1.2C异常概念 二、异常的使用 2.1异常的抛出和捕获 2.2try/catch的使用 2.3异常安全 2.4异常的重新抛出 2.5异常的规范 三、服务器开发中异常体系的模拟 一、C/C如何处理错误 1.1C语言传统的处…

SEO关键词布局时如何查找用户爱搜索的关键词?

在关键词布局中&#xff0c;确定完核心词后&#xff0c;就要考虑在网站关键词扩展时&#xff0c;找到用户爱搜索的词&#xff0c;只有在网站页面关键词布局时&#xff0c;布局用户爱搜索的词&#xff0c;才能够使用户在搜索时网站的页面能够有机会出现在用户的搜索结果页&#…

蓝桥杯算法题:栈(Stack)

这道题考的是递推动态规划&#xff0c;可能不是很难&#xff0c;不过这是自己第一次靠自己想出状态转移方程&#xff0c;所以纪念一下&#xff1a; 要做这些题目&#xff0c;首先要把题目中会出现什么状态给找出来&#xff0c;然后想想他们的状态可以通过什么操作转移&#xf…

个人成长秘籍:参加六西格玛绿带培训的好处

在当今竞争激烈的商业环境中&#xff0c;追求卓越与持续改进已成为企业和个人成功的关键。六西格玛绿带培训&#xff0c;作为一种全面提升管理技能和工作效率的培训课程&#xff0c;不仅帮助企业优化流程、提高质量和效率&#xff0c;也为个人职业发展开辟了一条光明大道。张驰…

cog predict docker unknown flag: --file

如图&#xff1a; 使用cog predict -i image“link-to-image” 出现docker unknown flag: --file的问题。 解决方法&#xff08;对我可行&#xff09;&#xff1a;切换cog版本。 这个是我一开始的cog安装命令&#xff08;大概是下的最新版&#xff1f;&#xff09;&#xff1…

cannal的使用

搭建MySQL 安装canal 1.新建文件夹logs, 新建文件canal.properties instance.properties docker.compose.yml instance.properties ################################################# ## mysql serverId , v1.0.26 will autoGen # canal.instance.mysql.slaveId0# enable g…

【话题:工作生活】2022年工作总结--疫情下的上海,疫情中的我。

现在是阳历2023年11月27日星期一&#xff0c;我再次开始撰写自己的年终工作总结。希望再过1、2个月&#xff0c;这份年终总结能够出炉&#xff0c;与大家相遇。 给自己定个小目标&#xff0c;年终的工作生活总结坚持写10年。我2017年毕业&#xff0c;之后就开始写每年的年终总结…

MathJax的基本使用

一、引言 MathJax引擎是一个开源的JavaScript库&#xff0c;它允许Web开发者在网页中嵌入高质量的数学公式。通过利用Web的最新技术&#xff0c;MathJax引擎可以解析LaTeX、MathML和AsciiMath等数学标记语言&#xff0c;并将其渲染为可视化的数学公式&#xff0c;这些公式可以…

【智能制造-1】涂胶解决方案

平面或立体转角处的等距点胶&#xff0c;既是技术上的难点也是实现上的痛点。 如何更好地保证拐角点胶的均匀性&#xff1f; 1、位置同步输出算法&#xff08;PSO&#xff09;&#xff1a;可以在点胶阀设定频率不变的情况下实现恒速等距点胶&#xff0c;完美解决拐角堆胶问题…

jsonpath在线解析器网址

jsonpath在线解析器网址&#xff1a;https://jsonpath.com/

梦想CAD 在线编辑软件

前言 有用户集成网页CAD之后&#xff0c;需要提取图纸的各种信息和数据&#xff0c;下面我们讲一下Web版CAD如何在前端直接提取修改和转换后的图纸信息&#xff0c;没有集成过在线CAD的小伙伴可以先看一下快速入门&#xff08;https://help.mxdraw.com/?pid32&#xff09; 在…

Vue2.x实现商城购物车

1.实现购物车页面 在页面中显示购物车中的商品信息&#xff0c;并能进行数量增减及商品删除操作&#xff0c;购物车中金额也随商品数量的变化而变化 2.创建cart.html页面 创建cart.html页面&#xff0c;在其中创建Vue实例&#xff0c;实例中首先准备一些商品信息以供显示&a…

逆向入门:为CTF国赛而战day05day06

用的汉化版的 昨天做了一道题目&#xff0c;然后下了那个apkide改之理,就没了 今天再来一题。 我发现&#xff1a;ascii表要好好学。这里#号是35就被写到题目里去了。 CTF reverse 不一样的flag_ctf reverse flag.bin-CSDN博客

云原生技术:开启你的数字王国

在科技领域的飞速进步中&#xff0c;云计算已经成为了现代企业和个人不可或缺的技术。在这股云计算的热潮中&#xff0c;"云原生"这一概念正逐步成为焦点。云原生的话题越来越普及&#xff0c;无论是在日常生活中还是在专业工作场合&#xff0c;这个术语都频繁出现。…