59.螺旋矩阵II
难度:中等
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
题解
/**
* @param {number} n
* @return {number[][]}
*/
var generateMatrix = function(n) {
let _result = Array.from({ length: n }, () => Array(n))
let num = 1,
top=0,
bottom = n - 1, // 行尾边界
left = 0, // 列首边界
right = n - 1 // 列尾边界
while (num <= n * n) {
// 首行
for (let i = left; i <= right; i++) {
_result[top][i] = num++
}
top++
// 尾列
for (let i = top; i <= bottom; i++) {
_result[i][right] = num++
}
right--
// 尾行
for (let i = right; i >= left; i--) {
_result[bottom][i] = num++
}
bottom--
// 首列
for (let i = bottom; i >= top; i--) {
_result[i][left] = num++
}
left++
}
return _result
};
分析
由题可知遍历顺序为顺时针,而且可知
上边界 top : 0
下边界 bottom : n - 1
左边界 left : 0
右边界 right : n - 1
开始num为1
遍历且需满足
num<=n*n
当遍历完上、左边界,边界值加1
遍历完下、右边界,边界值减1