javascript - 递归创建所有可能的数字组合?
问题描述
如果我有给定的数字数组,例如:
[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)
}
})
}
显然这是完整/非功能性代码......需要一个快速开始。
解决方案
这是递归生成器的完美用例:
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])]
推荐阅读
- javascript - 对异步函数执行测试时如何处理阻塞?
- flutter - 语法荧光笔不会展开以显示所有代码
- dexie - 添加主键作为参数时,Dexiedb Put 方法不起作用
- python - 如何在注册 Django 时检索用户 IP 地址、城市、国家/地区?
- python-3.x - 我如何获得这个输出?
- php - 使用 twilio 代理 api 进行通话录音
- formatting - 我可以使用 openpxl 查找工作表中的所有空白(空单元格)并将 PatternFill 应用于
- php - 路由问题:Laravel 5.8 中不存在类控制器
- angular - 使用 ' of ' 运算符创建 Observable 后订阅不可用(需要 root 和单例服务)
- sql - 如何在 SQL Server 中使用 Parse 名称分隔值