螺旋矩阵与滑动窗口

88 阅读1分钟

 ​编辑

这题主要考察思维​编辑

我来一一解释这串代码

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],贼贼贼