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

【LeetCode】螺旋矩阵

题目

题目链接

请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素,示例如下:
在这里插入图片描述

思路

整体思路为模拟。具体地,可以采用“减而治之”的思想,将整个遍历过程拆分为一次次对每一行和每一列的遍历,每次只考虑一行/一列,每完成一次遍历矩阵整体会收缩一行/一列,此时更新相应的边界坐标即可。
一共有四个方向的遍历顺序,需要分别处理。

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

## 代码

const enum EDirection {right,down,left,up,
}function spiralOrder(matrix: number[][]): number[] {const result: number[] = [];const m = matrix.length;const n = matrix[0].length;// 递归地访问每一行或列const visit = (rowStart: number, rowEnd: number, colStart: number, colEnd: number, direction: EDirection) => {if (rowStart === rowEnd || colStart === colEnd) return;// 枚举每个方向push元素的顺序switch (direction) {case EDirection.right: {for (let i = colStart; i < colEnd; i++) {result.push(matrix[rowStart][i]);}visit(rowStart + 1, rowEnd, colStart, colEnd, EDirection.down);break;}case EDirection.down: {for (let i = rowStart; i < rowEnd; i++) {result.push(matrix[i][colEnd- 1]);}visit(rowStart, rowEnd, colStart, colEnd - 1, EDirection.left);break;}case EDirection.left: {for (let i = colEnd - 1; i >= colStart; i--) {result.push(matrix[rowEnd - 1][i]);}visit(rowStart, rowEnd - 1, colStart, colEnd, EDirection.up);break;}case EDirection.up: {for (let i = rowEnd - 1; i >= rowStart; i--) {result.push(matrix[i][colStart]);}visit(rowStart, rowEnd, colStart + 1, colEnd, EDirection.right);break;}}}// 从原始矩阵开始visit(0, m, 0, n, EDirection.right);return result;
};
http://www.xdnf.cn/news/3089.html

相关文章:

  • Maven根据Google proto文件自动生成java对象
  • 香港科技大学广州|智能制造学域硕、博研究生招生可持续能源与环境学域博士招生宣讲会—四川大学专场!
  • Unity-Shader详解-其三
  • 电子电器架构 --- 人工智能、固态电池和先进自动驾驶功能等新兴技术的影响
  • Centos Ubuntu RedOS系统类型下查看系统信息
  • 黑马Redis(四)
  • A2A与MCP:理解它们的区别以及何时使用
  • 除法未能拿下 一直运行超时
  • MySQL 实战 45 讲 笔记 ----来源《极客时间》
  • Markdown语法大全
  • 洛谷题解 | CF111C Petya and Spiders
  • Spark GraphX 机器学习:图计算
  • CertiK创始人顾荣辉出席Unchained Summit,探讨Web3.0安全与合规路径
  • 记录 Flink jdbc、mysql-cdc 连接 mysql8 碰到的适配问题
  • 4.28-4.29 Vue
  • phpstudy修改Apache端口号
  • Azure Synapse Dedicated SQL pool企业权限管理
  • 论文阅读:2024 arxiv FlipAttack: Jailbreak LLMs via Flipping
  • 怎样学习Electron
  • 驱动开发硬核特训 · Day 25 (附加篇):从设备树到驱动——深入理解Linux时钟子系统的实战链路
  • PSO详解变体上新!新型混合蛾焰粒子群优化(MFPSO)算法
  • GA-Transformer遗传算法优化编码器多特征分类预测/故障诊断,作者:机器学习之心
  • 【Redis——数据类型和内部编码和Redis使用单线程模型的分析】
  • EtherCAT 分布式时钟(DC)补偿技术解析
  • React Native 动态切换主题
  • 使用js写一个发布订阅者
  • 给 BBRv2/3 火上浇油的 drain-to-target
  • 26考研 | 王道 | 计算机网络 | 第一章 计算机网络的体系结构
  • Python核心机制与实战技巧:从变量作用域到GIL的深度解析
  • 基于Springboot + vue实现的列书单读书平台