前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode 54. 螺旋矩阵 js高效实现

leetcode 54. 螺旋矩阵 js高效实现

作者头像
蓓蕾心晴
发布2022-11-16 13:01:00
3590
发布2022-11-16 13:01:00
举报
文章被收录于专栏:前端小叙

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

代码语言:javascript
复制
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
代码语言:javascript
复制
输入: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]

https://leetcode.cn/problems/spiral-matrix/description/
代码语言:javascript
复制
// 空间复杂度:O(1)
// 时间复杂度:O(mn),其中 mmm 和 nnn 分别是输入矩阵的行数和列数。矩阵中的每个元素都要被访问一次。
var spiralOrder = function(matrix) {
    if(matrix.length === 0 ) return []
    let res = []
    // 分别定义 l:左边界,r:右边界,t:上边界,b:下边界
    let l = 0,r = matrix[0].length - 1, t = 0, b = matrix.length - 1
    // 为了让持续进入循环,通过内部判断超过边界值,来 break 跳出循环
    while(true){
        // 先从左至右,遍历第一行
        for(let i = l;i <= r;i++) res.push(matrix[t][i])
        // 同时将上边界+1,并判断当上边界超出下边界,则跳出循环
        if(++t > b) break
        // 从上至下,遍历最后一列
        for(let i = t;i <= b;i++) res.push(matrix[i][r])
        // 同时将右边界-1,并判断是否超出边界,超出则跳出循环
        if(--r < l) break
        // 从右至左,遍历最后一行
        for(let i = r;i >= l;i--) res.push(matrix[b][i])
        //同时将下边界-1 并判断是否超出上边界,超出跳出循环
        if(--b < t) break
        // 从左至右,遍历最左边一列
        for(let i = b;i >= t;i--) res.push(matrix[i][l])
        // 同时将左边界+1,并判断是否超出右边界,超出则跳出循环
        if(++l > r ) break
    }
    // 返回最终生成的数组 
    return res
};

参考链接

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档