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

⭐力扣刷题:螺旋矩阵

题目:
给你一个 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. 建立四个边界指针
    我们维护四个变量来标记当前要遍历的"层"的边界:

    top:当前层的顶部行索引

    bottom:当前层的底部行索引

    left:当前层的左边界列索引

    right:当前层的右边界列索引

    初始化时:

    top = 0(矩阵最上面一行)

    bottom = 矩阵行数-1(矩阵最下面一行)

    left = 0(矩阵最左边一列)

    right = 矩阵列数-1(矩阵最右边一列)

  2. 循环执行四个方向的遍历
    每一轮循环完成一圈的遍历,包含四个阶段:

    阶段1️⃣:从左到右遍历上边界

    从 left 到 right,遍历第 top 行的元素

    完成后,top++(上边界向下移动一层)

    阶段2️⃣:从上到下遍历右边界

    从 top 到 bottom,遍历第 right 列的元素

    完成后,right–(右边界向左移动一层)

    阶段3️⃣:从右到左遍历下边界

    从 right 到 left,遍历第 bottom 行的元素

    完成后,bottom–(下边界向上移动一层)

    阶段4️⃣:从下到上遍历左边界

    从 bottom 到 top,遍历第 left 列的元素

    完成后,left++(左边界向右移动一层)

  3. 终止条件
    每个方向遍历结束后,都需要检查是否还有元素未遍历:

    当 top > bottom 时:所有行都已遍历完

    当 left > right 时:所有列都已遍历完

    只要满足其中一个条件,说明所有元素都已遍历完毕,循环终止。

具体代码:

/** * @param {number[][]} matrix * @return {number[]} */varspiralOrder=function(matrix){letleft=0letright=matrix[0].length-1lettop=0letbottom=matrix.length-1letres=[]while(true){//从左到右遍历上边界for(leti=left;i<=right;i++){res.push(matrix[top][i])}top++if(top>bottom)break//从上到下遍历右边界for(letj=top;j<=bottom;j++){res.push(matrix[j][right])}right--if(right<left)break//从右到左遍历下边界for(letk=right;k>=left;k--){res.push(matrix[bottom][k])}bottom--if(bottom<top)break//从下到上遍历左边界for(letm=bottom;m>=top;m--){res.push(matrix[m][left])}left++if(left>right)break}returnres};
http://www.jsqmd.com/news/87194/

相关文章:

  • 2025年靠谱的桌面主被动隔振台/主被动隔振平台厂家推荐及采购参考 - 品牌宣传支持者
  • GitHub一小时速成指南:从零基础到熟练操作
  • 5步掌握Loco+Tauri:构建高性能跨平台桌面应用的终极指南
  • Armbian嵌入式音频系统:从硬件驱动到应用层的完整解决方案
  • 2025年评价高的超高速摄像机厂家最新推荐权威榜 - 品牌宣传支持者
  • 《极品家丁七改版》终极珍藏完整版:一键下载无雷精校全本资源
  • 2025年口碑好的高速相机应用场景/高速相机用户口碑最好的厂家榜 - 品牌宣传支持者
  • 2025年比较好的糖果铁盒行业内知名厂家排行榜 - 品牌宣传支持者
  • unique_ptr::release
  • Transformer+Listwise:一文读懂个性化重排模型PRM
  • Lucy Edit AI:用文字重新定义视频编辑的智能革命
  • go字符串之替换数字算法
  • 终极邮件编辑器:轻松拖拽,快速打造专业级邮件
  • React Native Snap Carousel 实战进阶:从基础配置到高级特效
  • 专业实验室改造,必须避开的5大坑
  • 2025成都火锅品牌推荐榜,网红店谁主沉浮?川渝火锅/特色美食/老火锅/火锅/火锅店/美食/重庆火锅火锅品牌必吃榜 - 品牌推荐师
  • Qwen3-VL本地部署实战:解锁PC端多模态AI视觉理解能力
  • 2025年热门的事件相机技术厂家选购指南与推荐 - 品牌宣传支持者
  • 静态博客迁移实战:从WordPress卡顿到Gridea极速体验
  • 什么是单例模式?
  • 终极WPF界面美化指南:HandyControl控件库完全实战
  • 基于工程分支的组件版本号策略:实现可控修复与主分支平滑升级
  • 千万注意!实验室装修这5个关键点不容忽视
  • 2025年比较好的3D打印耗材/TPU3D打印耗材厂家最新用户好评榜 - 品牌宣传支持者
  • 2025年比较好的净化门窗行业内知名厂家排行榜 - 品牌宣传支持者
  • 【重学MySQL】一文搞懂行级锁 无废话版
  • 一键检测微信网址是否被拦截,附送 PHP/Python/Go 对接源码
  • C++语言基础入门
  • 改善深层神经网络 第二周:优化算法(一)Mini-batch 梯度下降
  • C++ bitset类的使用与简介