我必须制作一个2维数组,其中包含从1到height ^ 2迭代的数字。 输入为高度,如果高度为5,则输出为:
[ [ 21, 22, 23, 24, 25 ],
[ 20, 19, 18, 17, 16 ],
[ 11, 12, 13, 14, 15 ],
[ 10, 9, 8, 7, 6 ],
[ 1, 2, 3, 4, 5 ] ]
我已经在这里进行了编码:
function snakeLadder(height) {
for (var i = 1; i <= height; i++) {
var output = [];
for (var j = 1; j < height; j++) {
output.push(i + j);
}
}
return output;
}
和输出结果像这样:
[ 6, 7, 8, 9, 10 ]
[ 4, 5, 6 ]
[ 3, 4 ]
谁能在我的代码中指出问题所在?
答案 0 :(得分:0)
您需要一个外部数组,您可以在其中移动行。
然后最好从零循环到小于height
,并乘以高度和偏移量1以获得正确的值。
function snakeLadder(height) {
var temp, result = []
for (var i = 0; i < height; i++) {
temp = [];
for (var j = 0; j < height; j++) {
temp.push(i * height + j + 1);
}
if (i & 1) {
temp.reverse();
}
result.unshift(temp);
}
return result;
}
console.log(snakeLadder(5).map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
function snakeLadder(height) {
var result = []
for(var i = height-1; i >= 0; i--) {
var row = [];
for(var j = 1; j <= height; j++) {
// if it's odd rows, increase(push), otherwise decrease(unshift)
if((height-i-1)%2 == 0)
row.push(height*i + j);
else
row.unshift(height*i + j);
}
result.push(row);
}
return result;
}
console.log(snakeLadder(5));
答案 2 :(得分:0)
代码的主要问题是未将行添加到最终结果数组中。其次,您需要反转奇数行以匹配您的预期输出。
这是一个简洁的ES6版本,它在...
构造函数上使用Array
扩展运算符来创建行和列,并将其映射到二维结果数组。使用二进制j
在行索引& 1
上对奇偶校验进行测试,以反转设置了最低有效位的行:
const snakeLadder = (h, i=h*h) =>
[...Array(h)].map((r, j) => {
const row = [...Array(h)].map(c => i--)
return j & 1 ? row : row.reverse();
})
;
console.log(snakeLadder(5));
答案 3 :(得分:0)
尝试一下:
for (var i = 0; i < height; i++) {
var output = [];
if((i+2)%2 ==0){
for (var j = 1; j <=height; j++) {
output.push( (i * height ) + j );
}
}
else if( (i%2) ==1){
for (var j = height; j>0; j--) {
output.push( (i * height) + j );
}
}
}
return output;
}