首页 > 解决方案 > 创建一个接受整数并生成包含整数对的数组的函数 [a, b] 按 a 和 b 的递增值排序

问题描述

我在我的软件工程训练营中遇到了这个练习问题,希望有人能指出我正确的方向。

编写一个函数 generatePairs,它接受一个整数并生成一个包含整数对 [a, b] 的数组。这些对应该通过增加 a 的值然后增加 b 的值来排序。以下是不同输入应返回的一些示例:

generatePairs(3) // [ [0, 0], [0, 1], [0, 2], [0, 3], [1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3] ]
generatePairs(2) // [ [0, 0], [0, 1], [0, 2], [1, 1], [1, 2], [2, 2] ]
generatePairs(1) // [ [0, 0], [0, 1], [1,1]]
generatePairs(0) // [ [0, 0]]

到目前为止,这是我的代码:

function generatePairs (num){
  array = [];
  // 0 [0,0] [0,1]

  // 1

  // 2
  for (i = 0; i<=num; i++){
    array.push([i,i]);
    if ((i+1)<=num) {
        array.push([i,i+1])
    }

    if ( num - i <= num && i===0 && num < i ) {
      array.push([i,num])
      if (num + i < i) {
        array.pop();
      }
    }

  } 
  return array;
}

generatePairs(2) // [ [0, 0], [0, 1], [0, 2], [1, 1], [1, 2], [2, 2] ]

我遇到的问题是,例如,当我尝试使用 2 时,我缺少 [0,2] 子数组。我尝试解决此问题的方法主要包括额外的 if 和 else 循环,但是对于我尝试过的每一个循环,我要么最终得到比它们应该更高的子数组,要么是一个半工作系统这仅适用于 2 而不适用于可以输入到函数中的任何数字。

标签: javascriptarraysfor-loopif-statementsub-array

解决方案


是不是比这简单得多?

function generatePairs(num) {
  let arr = []
  for (let i = 0; i <= num; i++) {
    for (let j = i; j <= num; j++) {
      arr.push([i, j])
    }
  }
  return arr
}
console.log(generatePairs(2));


推荐阅读