leetcode 之 54.螺旋矩阵

3 篇文章 0 订阅
3 篇文章 0 订阅

什么螺旋矩阵:螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。

如下:
在这里插入图片描述
最终组成的结果是

[
   1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10
]
function spiralOrder(matrix) {
  let result = []; // 结果集
  let num = 1; // 标志位
  while (num) {
    if (num === 1) { 
      // 从左到右
      // 获取源第一项,铺开
      result.push(...matrix.shift());
    } else if (num === 2) {
      // 从上倒下
      // 获取源每一项、最后一位,铺开
      matrix.forEach((it) => {
      	// 这里pop之后,it可能是个空数组 
        result.push(it.pop());
      });
    } else if (num === 3) {
      // 从右到左
      // 获取源最后一项、反转、铺开
      result.push(...matrix.pop().reverse());
    } else if (num === 4) {
      // 从下到上
      // 获取源每一项、的第一位,铺开
      for (var i = matrix.length - 1; i > -1; i--) {
      	// 这里shift之后,matrix[i]可能是个空数组
        result.push(matrix[i].shift());
      }
    }
    // 因为我们直接操作源数组
    // 源数组长度被不断缩小
    // 没有长度的时候,表示遍历完毕
    // 返回 result
    // matrix[0]可能是个空数组
    if (!matrix.length || !matrix[0].length) {
      return result;
    }
    // 加 1 
    // 表示切换获取项的方式
    num += 1;
    // 转一圈后,复位,从新开始,从左到右
    if (num > 4) {
      num = 1;
    }
  }
}
console.log(
  spiralOrder([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
    [10, 11, 12],
  ])
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值