给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
1 <= n <= 20
解题思路
建立一个二维数组,从 1 到 n^2 的所有整数,按照从小到大, 顺时针 → ↓ ← ↑ 的顺序,写入二维数组中
/**
* @param {number} n
* @return {number[][]}
*/
var generateMatrix = function (n) {
// 初始化变量
let up = left = 0, down = right = n - 1;
let num = 1;
// 定义二维数组
let ans = new Array(n).fill().map(() => new Array(n));
// 顺时针给二维数组赋值
while (true)
{
// 左上角开始,从左到右
for (let i = left; i <= right; i ++ ) ans[up][i] = num ++ ;
if (++ up > down) break;
// 右上角开始,从上到下
for (let i = up; i <= down; i ++ ) ans[i][right] = num ++ ;
if (-- right < left) break;
// 右下角开始,从右到左
for (let i =right; i >= left; i -- ) ans[down][i] = num ++ ;
if (-- down < up) break;
// 左下角开始,从下到上
for (let i = down; i >= up; i -- ) ans[i][left] = num ++ ;
if (++ left > right) break;
}
return ans;
};
复杂度分析:
时间复杂度:O( n)
空间复杂度:O(1)