首页 > 其他分享 >leetcode 54. 螺旋矩阵 js高效实现

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

时间:2022-11-07 01:22:17浏览次数:77  
标签:边界 54 矩阵 js break let res leetcode matrix

给你一个 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]

https://leetcode.cn/problems/spiral-matrix/description/

// 空间复杂度: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
};

参考链接



标签:边界,54,矩阵,js,break,let,res,leetcode,matrix
From: https://www.cnblogs.com/beileixinqing/p/16864742.html

相关文章

  • LeetCode刷题记录.Day7
    有效的字母异位词题目链接242.有效的字母异位词-力扣(LeetCode)classSolution{public:boolisAnagram(strings,stringt){intrecord[26]={0};......
  • js中变量base64加密传输
    首先对base64进行定义:varBase64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){......
  • js中的call,apply与bind
    call,apply,bind都是一种方法。一,call()①:call()是可以调用函数的。1functionfn(){2console.log(12)3}45fn.call()//12 ②:通过给call()内部传......
  • threejs_threejs3
    向量的clone方法和copy方法求两点之间的距离向量之间的叉乘three.js生成的renderer.domElement如何添加到目标的元素中直接引入想要的函数,可以不需要像以前那样引......
  • leetcode318
    6231.雇佣K位工人的总代价题意:一个数组表示雇佣工人花费,k表示需要雇佣的人数,从数组前后各选candidates个人,从中选花费最小下标最小的工人,然后数组更新,重复上述操作,直至......
  • js中截取字符串:
    js中截取字符串:str.substr(startIndex,length);//从下标为startIndex的字符开始截取,截取length个字符str.substring(startIndex,endIndex)//从下标为startIndex的字符开......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:二叉树中的最大路径和
    题目:路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节......
  • Java爬虫工具Jsoup使用Demo
    导入依赖<dependencies><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.13.1</v......
  • dp-leetcode152
    动态规划问题,存在重叠子问题/***<p>给你一个整数数组<code>nums</code> ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘......
  • JSON字符串与JSON对象的区别
    Q:什么是"JSON字符串",什么是"JSON对象",两者的区别?a.JSON对象是直接可以使用JQuery操作的格式,如js中可以用对象(类名)点出属性(方法)一样b.JSON字符串仅仅只是一个字符串,一个......