给定一个正整数 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)