我的js算法爬坑之旅-螺旋矩阵 II

948 阅读1分钟

第九十九天:力扣 59题,螺旋矩阵 II

地址:leetcode-cn.com/problems/sp…

思路:直接循环遍历

var generateMatrix = function (n) {
  if(n == 1) return [[1]] // 特殊情况
  var res = [];
  for (var i = 0; i < n; i++) {
      res[i] = [];
  }
  var circleNum = n - 1;
  var num = 1;
  var count = 0;
  while (circleNum) {
    var x = count;
    var y = count;

    var rect = n - (count * 2);
    if(rect == 1){
      res[y][x] = num
    }; // 最中间的圈为1时

    // 上
    for(var i = 0; i < rect - 1; i++){
      res[y][x++] = num++;
    }

    // 右
    for(var i = 0; i < rect - 1; i++){
      res[y++][x] = num++;
    }

    // 下
    for(var i = 0; i < rect - 1; i++){
      res[y][x--] = num++;
    }

    // 左
    for(var i = 0; i < rect - 1; i++){
      res[y--][x] = num++;
    }

    // 每次圈数
    circleNum--;
    // 记录循环次数,用于定义每次起点的位置
    count ++;
  }
  return res;
};

执行用时:88 ms, 在所有 JavaScript 提交中击败了36.62%的用户

内存消耗:37.9 MB, 在所有 JavaScript 提交中击败了49.05%的用户