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

【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.mrgr.cn/news/100671.html

相关文章:

  • TwinCAT3安装记录
  • 在VTK中使用巴特沃斯低通滤波器(频域处理)
  • 探索目标检测:边界框与锚框的奥秘
  • 【Vagrant+VirtualBox创建自动化虚拟环境】Ansible测试Playbook
  • Tailwind CSS 实战:基于 Kooboo 构建企业官网页面(三)
  • 如何在本地部署小智服务器:从源码到全模块运行的详细步骤
  • RPC 是什么?为什么有了 HTTP 还要用 RPC
  • Linux/AndroidOS中进程间的通信线程间的同步 - 管道和FIFO
  • LLamaFactory如何在Windows系统下部署安装训练(保姆级教程)
  • 【嵌入式———基本定时器TIM6基本操作——实验需求:使用系统嘀嗒定时器,每隔1s让LED1灯闪烁一次】】
  • Next框架学习篇 ✅
  • 【MCP Node.js SDK 全栈进阶指南】高级篇(5):MCP之微服务架构
  • runpod team 怎么设置自己的ssh key呢?
  • 【统计方法】交叉验证:Resampling, nested 交叉验证等策略 【含R语言】
  • 如何用python脚本把一个表格有4万多条数据分为两个文件表,每个2万条数据?
  • unity Orbbec Femto Bolt接入unity流程记录 AzureKinectExamples 插件 使用记录
  • Android WIFI体系
  • LeetCode热题100--53.最大子数组和--中等
  • 2025.4.29总结
  • Nacos源码—2.Nacos服务注册发现分析四