如何按照描述创建矩阵

时间:2019-01-09 17:52:33

标签: javascript arrays algorithm


如何创建矩阵,输出必须类似于:
1,3,5,7,9
2、4、6、8、10
11,13,15,17,19
20、22、24、26、28
期待对JS的回答,但这不是重点,因为我正在寻找一种算法。
谢谢
我已经尝试过这样的事情:

let arr = [];

for(let i = 0; i < 2; i++){
  arr[i] = []
  for(let j = 0; j < 5; j++){
    if(j % 2 ==0){
      arr[j] = i
    }
  }
}

console.log(arr)

2 个答案:

答案 0 :(得分:2)

如您所见,每次您固定起点后,都会添加一个公共数字2。所以在这里我固定了两个起点,一个是even at 2,另一个是odd at 1。现在,在每次迭代中,将两个值都增加2,并将evenArrayoddArray都添加到最终输出中。

每次内部for循环迭代后,不要忘记reset evenArrayoddArray

let even = 2;
let odd = 1;
let arr = [];

for(let i = 0; i < 2; i++){
  let evenArr = []
  let oddArr = []
  for(let j = 0; j < 5; j++){
    evenArr[j] = even;
    oddArr[j] = odd;
    even +=2;
    odd +=2;
  }
  even = (even-2) * 2;  // to take care of point where even starts with double of last inserted value.
  arr.push(oddArr.join(' '),evenArr.join(' '))
}

console.log(arr)

答案 1 :(得分:2)

首先,尝试获取构建规则

                          row   start  comment
---- ---- ---- ---- ---- ------ ------ -------------------
  1    3    5    7    9   odd      1
  2    4    6    8   10   even     2
 11   13   15   17   19   odd     10   needs an adjustment
 20   22   24   26   28   even    20

然后用所需的行创建一个数组,并用值填充它。根据行的索引,用25夹住每行的起始值。

在每一行的内部取一个起始值,对非偶数或奇数进行调整,然后加上内部索引的两倍。

var array = Array.from(
        { length: 4 },
        (start => (_, i) => Array.from(
            { length: 5 },
            (v => (_, j) => v + (v % 2 === i % 2) + j * 2)
            (start *= (i % 2 ? 2 : 5))
        ))
        (0.2)
    );

console.log(array.map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }