⭐力扣刷题:螺旋矩阵

题目:

给你一个 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 时:所有列都已遍历完

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

具体代码:

javascript 复制代码
/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function(matrix) {
    let left = 0
    let right = matrix[0].length-1
    let top = 0
    let bottom = matrix.length-1
    let res = []
    while(true){
        //从左到右遍历上边界
        for(let i = left;i<=right;i++){
            res.push(matrix[top][i])
        }
        top++
        if(top>bottom) break
        //从上到下遍历右边界
        for(let j = top;j<=bottom;j++){
            res.push(matrix[j][right])
        }
        right--
        if(right<left) break
        //从右到左遍历下边界
        for(let k = right;k>=left;k--){
            res.push(matrix[bottom][k])
        }
        bottom--
        if(bottom<top) break
        //从下到上遍历左边界
        for(let m = bottom;m>=top;m--){
            res.push(matrix[m][left])
        }
        left++
        if(left>right) break
    }
    return res
};
相关推荐
黎阳之光20 分钟前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩1 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_629494731 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
feifeigo1232 小时前
STM32矩阵键盘驱动(库函数版)实现
stm32·矩阵·计算机外设
ʚ希希ɞ ྀ2 小时前
单词拆分----dp
算法
oo哦哦2 小时前
全域矩阵系统的技术架构拆解:从单点效率到链路闭环
人工智能·矩阵·架构
智者知已应修善业3 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机
智者知已应修善业3 小时前
【51单片机2按键控制1个敞亮LED灯闪烁和熄灭】2023-11-3
c++·经验分享·笔记·算法·51单片机
AI算法沐枫3 小时前
大模型 | 大模型之机器学习基本理论
人工智能·python·神经网络·学习·算法·机器学习·计算机视觉
吃着火锅x唱着歌3 小时前
LeetCode 1019.链表中的下一个更大节点
算法·leetcode·链表