2021/03/16 每日一题 螺旋矩阵 II

LeetCode上螺旋矩阵 II,中等难度,记录下解题思路

传入一个n,要求得出n*n的螺旋矩阵

和昨天的题目类似,昨天是遍历获取螺旋矩阵,今天是遍历填充螺旋矩阵,那么填充的逻辑就和昨天一样,并且昨天的题目因为矩阵是正好n*n的正方形,还会有3种情况讨论。

今天的条件就是n*n的矩阵,那么最后一定会只剩下left === rightbottom === top这种情况,直接填充就好了

设置一个计数num,每次填充之后都自增,所以基本上可以套用昨天的代码

var generateMatrix= function (n) {
  // 创建一个n*n的二维数组
  let matrix = Array.from(Array(n),() => new Array(n))
  console.log(matrix);
  // 定义计数为
  let num = 1
  // 设置边界
  let top = 0, 
  bottom = n - 1, 
  left = 0, 
  right = n - 1
  // 当num <= n*n的时候填充二维数组
  while (num <= n*n) {
    // 填充顶部行
    for (let i = left; i <= right; i++) {
      matrix[top][i] = num 
          num++
    }
    top++;
    // 填充右侧列
    for (let i = top; i <= bottom; i++) {
          matrix[i][right] = num
      num++;
    }
    right--;
    // 填充底部行
    for (let i = right; i >= left; i--) {
          matrix[bottom][i] = num
      num++;
    }
    bottom--;
    // 填充左侧列
    for (let i = bottom; i >= top; i--) {
          matrix[i][left] = num
      num++;
    }
    left++;
  }
  // 返回结果
  return matrix
};

你可能感兴趣的:(2021/03/16 每日一题 螺旋矩阵 II)