【问题标题】:Create all possible number combinations recursively?递归创建所有可能的数字组合?
【发布时间】:2018-08-05 17:36:06
【问题描述】:

如果我有一个给定的数字数组,例如:

[1, 2, 7, 1, 9]

如何递归创建这些数字的所有可能组合的数组,例如:

[12719, 12791, 12971, 12179, etc...]

我想通过以下方式完成此操作:

const producePossibleNumbers = (digits) => {

    return digits.map((d, index) => {

        const remainingDigits = digits.filter((x, i) => i !== index)
        if (remainingDigits.length === 1) {
            return d + remainingDigits[0]
        } else {
            producePossibleNumbers(remainingDigits)
        }

    })    

}

显然这是完整/非功能性代码...需要快速开始。

【问题讨论】:

标签: javascript arrays algorithm recursion ecmascript-6


【解决方案1】:

这是递归生成器的完美用例:

 function* combinations(arr, prepend = []) {
   if(arr.length === 1) {
     yield prepend.concat(arr[0]);
     return;
   }
   for(const [index, el] of arr.entries()) {
     yield* combinations(arr.filter((_, i) => i !== index), prepend.concat([el]));
   }
 }

可用作:

 [...combinations([1, 2, 7, 1, 9])]

【讨论】:

    猜你喜欢
    • 2014-02-28
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多