我想用蛇形图案填充一个二维数字数组,我尝试了这个算法,但结果不是预期的:
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添加了日志,这样您就可以看到数组是如何遍历的