数组-59. 螺旋矩阵 II

78 阅读1分钟

题目

leetCode

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

代码

        /**
         * @param {number} n
         * @return {number[][]}
         */
        var generateMatrix = function(n) {

            // let result = [];
            // // 生成一个 n * n 的二维数组
            // for(let i = 0; i < n; i++) {
            //     let arr = [];
            //     for(let k = 0; k < n; k++) {
            //         arr.push(0);
            //     }
            //     result.push(arr);
            // }

            let result = new Array(n).fill(0).map(() => new Array(n).fill(0));

            let i = 0,
                j = 0;
            let count = 1;

            let whileLoop = Math.floor(n / 2),
                mid = Math.floor(n/2);

            let offsetI = 1,
                offsetJ = 1;

            while(whileLoop) {

                for(; i < n - offsetI; ++i) {
                    result[j][i] = count++;
                }

                for(; j < n - offsetJ; ++j) {
                    result[j][i] = count++;
                }
                
                for(; i >= offsetI ; --i) {
                    result[j][i] = count++;
                }
                
                for(;j >= offsetJ; --j) {
                    result[j][i] = count++;
                }

                i++;
                j++;

                offsetI++;
                offsetJ++;

                whileLoop--;
            }

            // 基数单独给中间位置赋值
            if(n%2 != 0) {
                result[mid][mid] = count;
            }
            
            return result;

        };

        let r = generateMatrix(9);

        console.log('结果 = ', r);

参考资料
github.com/youngyangya…