当前位置: 首页 > news >正文

[Day 15]54.螺旋矩阵(简单易懂 有画图)

今天我们来看这道螺旋矩阵,和昨天发的题很类似。没有技巧,全是循环。小白也能懂~
力扣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]

思路:

在这里插入图片描述
1、我们可以根据这个例图来定义一下变量,确定该有的左右边界,上下边界。
2、我们还需要一个结果数组来保存矩阵。
3、左边不大于等于右边的时候,上边不大于等于下面才能进行以下四个循环
从左到右
从上到下
从右到左
从下到上
-》循环的时候要考虑加加减减更新边界值。
-》循环遍历后,根据行列对应的边界值插入到数组中
4、最后返回结果数组

运行代码及注释

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> result;           // 定义一个结果数组int left = 0;                 // 定义左边界值int right = matrix[0].size(); // 定义右边界值,因为是矩阵int top = 0;                  // 定义矩阵上边界int bottom = matrix.size();   // 定义矩阵下边界while (left < right && top < bottom) { // 当条件成立循环持续// 从左到右遍历for (int i = left; i < right; i++) {result.push_back(matrix[top][i]);//matrix[top][i]里的值对应top行 i列}++top;//更新topif (top >= bottom) {break;//如果top>=bottom证明越界,就结束遍历}// 从上到下遍历for (int j = top; j < bottom; j++) {result.push_back(matrix[j][right - 1]);//matrix[j][right - 1]j行[right - 1]列}--right;//right向前移动if (left >= right) {break;如果left >= right证明越界,就结束遍历}// 从右到左遍历for (int k = right - 1; k >= left; --k) {result.push_back(matrix[bottom - 1][k]);}--bottom;if (top >= bottom) {break;}// 从下到上遍历for (int l = bottom - 1; l >= top; l--) {result.push_back(matrix[l][left]);}++left;}return result;//返回结果数组}};

总结

这道题目和昨天的题目是差不多的,要注意边界,并且更新边界,进行循环遍历每行每列数组,不明白边界的可以看看我之前的二分查找还有上一个螺旋矩阵题目呀~希望对你有所帮助!

http://www.lryc.cn/news/525834.html

相关文章:

  • HTTP 配置与应用(不同网段)
  • Quartus:开发使用及 Tips 总结
  • VSCode下EIDE插件开发STM32
  • Golang并发机制及CSP并发模型
  • HTML 文本格式化详解
  • 我谈《概率论与数理统计》的知识体系
  • 五、华为 RSTP
  • 基于Java Web的网上房屋租售网站
  • Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用
  • git常用命令学习
  • 【优选算法】7----三数之和
  • 分子动力学模拟里的术语:leap-frog蛙跳算法和‌Velocity-Verlet算法
  • 2025年数学建模美赛:A题分析(1)Testing Time: The Constant Wear On Stairs
  • 利用 SoybeanAdmin 实现前后端分离的企业级管理系统
  • 996引擎 - 前期准备-配置开发环境
  • Tensor 基本操作4 理解 indexing,加减乘除和 broadcasting 运算 | PyTorch 深度学习实战
  • 【Uniapp-Vue3】request各种不同类型的参数详解
  • 【Prometheus】Prometheus如何监控Haproxy
  • SSM开发(一)JAVA,javaEE,spring,springmvc,springboot,SSM,SSH等几个概念区别
  • HTML5 常用事件详解
  • TCP全连接队列
  • 统计文本文件中单词频率的 Swift 与 Bash 实现详解
  • iOS 权限管理:同时请求相机和麦克风权限的最佳实践
  • Excel 实现文本拼接方法
  • 软考信安27~Windows操作系统安全相关
  • 从 Spark 到 StarRocks:实现58同城湖仓一体架构的高效转型
  • WordPress Hunk Companion插件节点逻辑缺陷导致Rce漏洞复现(CVE-2024-9707)(附脚本)
  • 使用 HTML 开发 Portal 页全解析
  • 机器学习(二)
  • Laravel 实战:用Carbon筛选最近15分钟内的数据