LeetCode上螺旋矩阵 II,中等难度,记录下解题思路
传入一个n,要求得出n*n的螺旋矩阵
和昨天的题目类似,昨天是遍历获取螺旋矩阵,今天是遍历填充螺旋矩阵,那么填充的逻辑就和昨天一样,并且昨天的题目因为矩阵是正好n*n的正方形,还会有3种情况讨论。
今天的条件就是n*n的矩阵,那么最后一定会只剩下left === right
、bottom === top
这种情况,直接填充就好了
设置一个计数num,每次填充之后都自增,所以基本上可以套用昨天的代码
var generateMatrix= function (n) {
// 创建一个n*n的二维数组
let matrix = Array.from(Array(n),() => new Array(n))
console.log(matrix);
// 定义计数为
let num = 1
// 设置边界
let top = 0,
bottom = n - 1,
left = 0,
right = n - 1
// 当num <= n*n的时候填充二维数组
while (num <= n*n) {
// 填充顶部行
for (let i = left; i <= right; i++) {
matrix[top][i] = num
num++
}
top++;
// 填充右侧列
for (let i = top; i <= bottom; i++) {
matrix[i][right] = num
num++;
}
right--;
// 填充底部行
for (let i = right; i >= left; i--) {
matrix[bottom][i] = num
num++;
}
bottom--;
// 填充左侧列
for (let i = bottom; i >= top; i--) {
matrix[i][left] = num
num++;
}
left++;
}
// 返回结果
return matrix
};