leetcode54 螺旋矩阵

题目:

题解:

 按层 计算

const spiralOrder = function(matrix) {
  let rows = matrix.length;
  let cols = matrix[0].length;
  let res = [];
  //特殊情况
  if(rows === 0 || cols === 0) return res;
  if(rows === 1) return matrix[0];
  //设置每层的边界  
  let left = 0, right = cols - 1, top = 0, bottom = rows - 1;
  while(left<= right && top <= bottom){
    //从左到右
    for(let i = left; i <= right; i++){
      res.push(matrix[top][i]);
    }
    //从上到下
    for(let i = top + 1; i <= bottom; i++){
      res.push(matrix[i][right]);
    }
    //若该层完整,能四周走一圈
    if(top < bottom && left < right){
      //从右到左
      for(let i = right - 1; i >= left; i--){
        res.push(matrix[bottom][i]);
      }
      //从下到上  
      for(let i = bottom - 1; i > top; i--){
        res.push(matrix[i][left]);
      }
    }
    //改变边界
    left++;right--;top++;bottom--;
    
  }

  return res;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值