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

LeetCode 力扣 热题 100道(二十九)螺旋矩阵(C++)

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

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> result;
        if (matrix.empty() || matrix[0].empty()) return result;
        
        int m = matrix.size();
        int n = matrix[0].size();
        int top = 0, bottom = m - 1, left = 0, right = n - 1;

        while (top <= bottom && left <= right) {
            // 从左到右遍历 top 边界
            for (int j = left; j <= right; ++j) {
                result.push_back(matrix[top][j]);
            }
            ++top;

            // 从上到下遍历 right 边界
            for (int i = top; i <= bottom; ++i) {
                result.push_back(matrix[i][right]);
            }
            --right;

            // 从右到左遍历 bottom 边界
            if (top <= bottom) {
                for (int j = right; j >= left; --j) {
                    result.push_back(matrix[bottom][j]);
                }
                --bottom;
            }

            // 从下到上遍历 left 边界
            if (left <= right) {
                for (int i = bottom; i >= top; --i) {
                    result.push_back(matrix[i][left]);
                }
                ++left;
            }
        }

        return result;
    }
};

定义四个边界

top:矩阵的上边界(初始为0)。

bottom:矩阵的下边界(初始为m-1)。

left:矩阵的左边界(初始为0)。

right:矩阵的右边界(初始为n-1)。

按顺时针顺序遍历

从左到右遍历 top 边界,然后将 top 增加1。

从上到下遍历 right 边界,然后将 right 减少1。

从右到左遍历 bottom 边界(如果未越界),然后将 bottom 减少1。

从下到上遍历 left 边界(如果未越界),然后将 left 增加1。

终止条件

top > bottomleft > right 时,遍历结束。


http://www.kler.cn/a/467388.html

相关文章:

  • 【视觉SLAM:六、视觉里程计Ⅰ:特征点法】
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 4:MHE表示能力
  • java中类的加载过程及各个阶段与运行时数据区中堆和方法区存储内容
  • C语言延时实现
  • reactor中的并发
  • ARM CCA机密计算安全模型之加密建议
  • 【STC库函数】Compare比较器的使用
  • 基于Java的敬老院管理系统的设计和实现【源码+文档+部署讲解】
  • Python嵌套列表的浅拷贝与深拷贝
  • Python虚拟环境管理
  • jquery实现的网页版扫雷小游戏源码
  • 从CRUD到高级功能:EF Core在.NET Core中全面应用(一)
  • STM32-笔记26-WWDG窗口看门狗
  • 基于高斯噪声模型的信号去噪——图像相加去噪的理论保证
  • 22408操作系统期末速成/复习(考研0基础上手)
  • 前端开发语言涉及到 的集合框架(Collections Framework)
  • PHP在做api开发中,RSA加密签名算法如何使用 ?
  • Fabric环境部署-Git和Node安装
  • 蛋白互作组学系列丨(四)IP-MS数据分析
  • 基础图形化界面的一个图片爬虫期末
  • 【初阶数据结构与算法】排序算法总结篇(每个小节后面有源码)(直接插入、希尔、选择、堆、冒泡、快速、归并、计数以及非递归快速、归并排序)
  • uniapp【拨打电话,发送消息】
  • 什么是TDD测试驱动开发(Test Driven Development)?
  • 【架构设计(一)】常见的Java架构模式
  • PDF阅读和编辑工具——xodo
  • 免费下载 | 2024中国大数据产业白皮书