Skip to content
On this page

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
    
};

技术文档集合