我必须创建一个包含从1到高度^ 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 ]
任何人都可以在我的代码中查明问题吗?
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));
你需要一个外部数组,你可以在那里取消行。
然后你最好从零循环到小于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; }
代码的主要问题是您的行未添加到最终的结果数组中。其次,您需要反转奇数行以匹配您的预期输出。
这是一个简洁的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));
试试这个:
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;
}