多维数组

问题描述 投票:2回答:4

我必须创建一个包含从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 ]

任何人都可以在我的代码中查明问题吗?

javascript arrays
4个回答
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));

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; }

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));

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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.