难度中等257收藏分享切换为英文接收动态反馈
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
通过次数51,184提交次数65,283
/**
* @param {number} n
* @return {number[][]}
*/
var generateMatrix = function (n) {
if (n === 0) {
return [];
}
if(n === 1) {
return [[1]];
}
let start = 0;
const nums = [];
for (let i = 0; i < n; i++) {
nums[i] = [];
for (let j = 0; j < n; j++) {
nums[i][j] = 0;
}
}
let startLine = 0;
while (start < n * n) {
for (let j = startLine; j < n - 1 - startLine; j++) {
nums[startLine][j] = ++start;
// console.log('a i, j: ', startLine, j, start);
if (start === n * n) {
return nums;
}
}
for (let i = startLine; i < n - 1 - startLine; i++) {
nums[i][n - 1 - startLine] = ++start;
// console.log('b i, j: ', i, n - 1 - startLine, start);
}
for (let j = n - 1 - startLine; j > startLine; j--) {
nums[n - 1 - startLine][j] = ++start;
// console.log('c i, j: ', n - 1 - startLine, j, start);
}
for (let i = n - 1 - startLine; i > startLine; i--) {
nums[i][startLine] = ++start;
// console.log('d i, j: ', i, startLine, start);
}
startLine++;
if(n * n - start === 1) {
nums[startLine][startLine] = ++start;
}
}
return nums;
};

425

被折叠的 条评论
为什么被折叠?



