Skip to content

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

示例:

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

思路:这道题最重要的点还是在于边界条件。这道题我们的边界条件是左闭右开。拿n=3来说,第一行从左到右为1,2,3。我们应该不包括3,第一次循环应该是1,2。第二次循环应该是3,4.不包括5.

javascript
/*
 * @lc app=leetcode.cn id=59 lang=javascript
 *
 * [59] 螺旋矩阵 II
 */

/**
 * @param {number} n
 * @return {number[][]}
 */
var generateMatrix = function (n) {
    const finalResult = new Array(n)
    for (let k = 0; k < finalResult.length; k++) {
        finalResult[k] = new Array(n)
    }

    //循环次数
    let loop = parseInt(n / 2)

    let hasMiddle = n % 2 === 1
    let middle = loop

    //当前的i j
    let i = 0; let j = 0

    //起始点
    //let startX = 0; startY = 0;

    //偏离值
    let offset = 1;

    let count = 1;

    while (loop--) {
        i = offset - 1;
        j = offset - 1;

        //最上面的一行
        for (j = offset - 1; j < n - offset; j++) {
            finalResult[i][j] = count++;
        }

        //最右侧一列
        for (i = offset - 1; i < n - offset; i++) {
            finalResult[i][j] = count++;
        }

        //下面一行
        for (j = n - offset; j >= offset; j--) {
            finalResult[i][j] = count++
        }

        //左侧一列
        for (i = n - offset; i >= offset; i--) {
            finalResult[i][j] = count++
        }
        offset++;
    }

    if (hasMiddle) {
        finalResult[middle][middle] = count
    }

    console.log('finalResult', finalResult)
    return finalResult
};

const test = 3

generateMatrix(test)

上次更新于: