如果我有给定的数字数组,例如:
[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)
}
})
}
很显然,这是完整的/非功能性的代码。需要快速入门。
答案 0 :(得分:2)
这是递归生成器的完美用例:
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])]