Appearance
59. 螺旋矩阵 II
原题链接:LeetCode 59. 螺旋矩阵 II
题目描述
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
**输入:**n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
**输入:**n = 1 输出:[[1]]
提示:
1
难度: Medium
题解代码
javascript
/**
* @param {number} n
* @return {number[][]}
*/
var generateMatrix = function(n) {
let arr = []
round = 0, // 循环圈数
index = 1, // 索引
dir = 1 // 方向
// 分为右下左上四个阶段,每完成4个阶段后 round+1。下一层循环的个数减2
const traverse = (row = 0, col = 0) => {
// 中心只有一个位置未填写
if(n - round * 2 === 1) {
arr[row][col] = index
return
}
for(let j = 0; j< 4; j++) {
for(let i = 0; i < n - round * 2 - 1; i++) {
arr[row][col] = index
index++
switch(dir%4) {
case 1: col++; break; // right
case 2: row++; break; // down
case 3: col--; break; // left
case 0: row--; break; // up
}
}
dir++
}
round++
if(!arr[row + 1][col + 1]) traverse(row + 1, col + 1)
}
for(let i = 0; i < n; i++) {
arr[i] = []
}
traverse()
return arr
};