这题主要考察思维
我来一一解释这串代码
var generateMatrix = function(n) {
const matrix = Array.from({ length: n }, () => Array(n).fill(0));
let top = 0, bottom = n - 1;
let left = 0, right = n - 1;
var num = 1;
while (num <= n * n) {
// 填充上行
for (let i = left; i <= right; i++) {
matrix[top][i] = num++;
}
top++;
// 填充右列
for (let i = top; i <= bottom; i++) {
matrix[i][right] = num++;
}
right--;
// 填充下行
if (top <= bottom) {
for (let i = right; i >= left; i--) {
matrix[bottom][i] = num++;
}
bottom--;
}
// 填充左列
if (left <= right) {
for (let i = bottom; i >= top; i--) {
matrix[i][left] = num++;
}
left++;
}
}
return matrix;
};
其实解题过程出现很多小细节的错误
1.填充方式的理解错误导致在for循环的条件没有添加等号
2.判断最后需不需要填充的if条件没有加等号,事实上填充到最后一个方块这四个指标都会相等,所以还是要添加循环
很多人一开始就想到了暴力 两个for拍屁股走人,恭喜你力扣更新后暴力无法通过了,我们来看看这个新颖的双指针算法---滑动窗口,注意滑动窗口只解决了(连续子数组)的最短和
第一次解答错误
没理解到第一个while(end),还是要多多加强
第二次错在第一个while里面嵌套的是sum+=num[end],贼贼贼