使用javascript用蛇图案填充矩阵



我想用蛇形图案填充一个二维数字数组,我尝试了这个算法,但结果不是预期的:

function fill2d(c,l) {
var arr = new Array[l][c];
let counter = 0;
for (let col = 0; col < arr.l; col++) {
if (col % 2 == 0) {
for (let row = 0; row < arr.l; row++) {
arr[row][col] = counter++;
}
} else {
for (let row = arr.length - 1; row >= 0; row--) {
arr[row][col] = counter++;
}
}
}
return arr;
}
fill2d(4,4)

类似的东西:

1  2  3  4
8  7  6  5
9 10 11 12
16 15 14 13

好的,所以基本上你所需要的就是逐行遍历,但从左到右和从右到左交替。这是我的解决方案:

function fill2d(c, l) {
let arr = new Array(l);
for (var i = 0; i < l; i++) {
arr[i] = new Array(c);
}
let count = 1;
for (let i = 0; i < l; i++) {
console.log("i: ", i);
let right_to_left = i % 2;
for (let j = (right_to_left * (l - 1));
(right_to_left ? (j >= 0) : (j < c)); j += (right_to_left ? -1 : 1)) {
console.log("j: ", j);
arr[i][j] = count++;
}
}
return arr;
}
console.log(fill2d(4, 4));

此外,您没有正确分配一个2d数组,您需要先分配一个1d数组,然后为该数组的每个元素分配一个数组。

注意:我为每个I和j添加了日志,这样您就可以看到数组是如何遍历的

最新更新