runtimegroup / puzzle

刷题
3 stars 0 forks source link

螺旋矩阵 #6

Open liuguanyu opened 4 years ago

liuguanyu commented 4 years ago

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

示例:

输入: 3
输出:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]
/**
 * @param {number} n
 * @return {number[][]}
 */
var generateMatrix = function(n) {

};

https://leetcode-cn.com/problems/spiral-matrix-ii/description/

liuguanyu commented 4 years ago
const generateMatrix = n => {
    let matrix = new Array(n).fill(0).map(el => new Array(n).fill(0)) 

    let _generateMatrix = (n, x=0, y=0, start=1) => {
        if (n <= 0){
           return
        }

            if (n == 1){
                  matrix[x][y] = start
           } 

           // 上
           for (let i = x; i < x + n - 1; ++i){
                matrix[y][i] = start++
           } 

           // 右
           for (let j = y; j < y + n-1; ++j){
            matrix[j][x+n-1] = start++
           }  

           // 下
           for (i = x+n-1; i > x; --i) {
            matrix[y+n-1][i] = start++
            }

            // 左
            for (j = y+n-1; j > y; --j) {
            matrix[j][x] = start++
            }  

             // 每走一圈,内圈数字即总行列数减2,数字为从外圈的结束数字的下一个开始
             return _generateMatrix(n-2, x+1, y+1, start)
    }

    _generateMatrix(n)

    return matrix
};