59 螺旋矩阵II

2022-8-10 LeetCode数组

标签:数组 中等

# 题目

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例 1:

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
1
2

示例 2:

输入:n = 1
输出:[[1]]
1
2

提示:

  • 1 <= n <= 20

# 解析

已经好久没有刷题了,这道题第一次做的时候有点思路,但是想的不太正确,没做出来,后面看了下题解纠正了思路,没有继续尝试了...今天第二次做吸取上次的教训,一步一步按题目逻辑来就做出来了,做这种题最好的方式就是模拟实现,再修正细节。

/**
 * @param {number} n
 * @return {number[][]}
 */
var generateMatrix = function(n) {
  if (n === 1) return [[1]]
  // 初始化一个二维数组
  const arr = Array(n).fill(0).map(() => Array(n).fill(0))
  // 每个方向的长度边界
  let border = n - 1
  // 当前x和y轴的位置
  let x = 0, y = 0
  // 当前元素
  let cur = 1
  while (border > 0) {
    // 向右
    for (let i=0; i<border; i++) {
      arr[x][y] = cur
      cur++
      y++
    }
    // 向下
    for (let i=0; i<border; i++) {
      arr[x][y] = cur
      cur++
      x++
    }
    // 向左
    for (let i=0; i<border; i++) {
      arr[x][y] = cur
      cur++
      y--
    }
    // 向上
    for (let i=0; i<border; i++) {
      arr[x][y] = cur
      cur++
      x--
    }
    x++
    y++
    border = border - 2
    if (border === 0) {
      arr[x][y] = cur
      break
    }
  }
  return arr
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49