news 2026/6/23 18:33:02

⭐力扣刷题:螺旋矩阵

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
⭐力扣刷题:螺旋矩阵

题目:
给你一个 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};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 19:33:05

5分钟掌握UpSetR:超越维恩图的集合交集可视化神器

5分钟掌握UpSetR&#xff1a;超越维恩图的集合交集可视化神器 【免费下载链接】UpSetR An R implementation of the UpSet set visualization technique published by Lex, Gehlenborg, et al.. 项目地址: https://gitcode.com/gh_mirrors/up/UpSetR UpSetR是一个强大的…

作者头像 李华
网站建设 2026/6/23 21:29:33

机构洗盘拼合指标绝无未来 源码分析

{}VAR01:LLV(L,10); VAR02:HHV(H,25); 趋势线:EMA((C-VAR01)/(VAR02-VAR01)*4,4); 价:EMA(MA((((C-REF(C,1))(H-REF(H,1))(L-REF(L,1)))/3)/C,5),1); 价5:MA(价,5); 量:EMA(MA((V-REF(V,1))/V,5),1); 量5:MA(量,5); 角:1>(ATAN((C/REF(C,1)-1)*100)*180/3.14115926)>-1; …

作者头像 李华
网站建设 2026/6/23 19:33:56

Android项目架构完整指南:模块化开发与Kotlin最佳实践

Android项目架构完整指南&#xff1a;模块化开发与Kotlin最佳实践 【免费下载链接】android-showcase igorwojda/android-showcase: 是一个用于展示 Android 开发技巧和最佳实践的项目集合&#xff0c;包括了多种 Android 开发工具和技巧&#xff0c;可以用于学习 Android 开发…

作者头像 李华
网站建设 2026/6/23 9:31:39

Horovod Process Sets:让千亿参数模型训练触手可及

Horovod Process Sets&#xff1a;让千亿参数模型训练触手可及 【免费下载链接】horovod Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet. 项目地址: https://gitcode.com/gh_mirrors/ho/horovod 你是否曾经因为GPU显存不足而放弃训…

作者头像 李华
网站建设 2026/6/23 6:46:27

5步掌握Loco+Tauri:构建高性能跨平台桌面应用的终极指南

5步掌握LocoTauri&#xff1a;构建高性能跨平台桌面应用的终极指南 【免费下载链接】loco &#x1f682; &#x1f980; The one-person framework for Rust for side-projects and startups 项目地址: https://gitcode.com/GitHub_Trending/lo/loco 还在为桌面应用开发…

作者头像 李华
网站建设 2026/6/23 18:28:11

如何在Zephyr RTOS中制定最佳编译策略?

如何在Zephyr RTOS中制定最佳编译策略&#xff1f; 【免费下载链接】zephyr Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures. 项目地址: https://gitcode.com/GitHub_T…

作者头像 李华