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
};