algorithm - 根据给定数组创建唯一对
问题描述
我无法解决这个问题。寻求算法专家的帮助。如果解决方案是用 javascript 提供的,那就太好了,但这没关系。
给定输入:
[
[1,2,3]
[4,5,6]
[7,8]
...
]
预期输出:
[
[1,4,7]
[1,4,8]
[1,5,7]
[1,5,8]
[1,6,7]
[1,6,8]
[2,4,7]
[2,4,8]
[2,5,7]
[2,5,8]
[2,6,7]
[2,6,8]
[3,4,7]
[3,4,8]
[3,5,7]
[3,5,8]
[3,6,7]
[3,6,8]
]
解决方案
您可以使用递归函数。在这里,我选择将其实现为生成器,使用*
and yield
。调用者可以直接使用for
循环迭代函数的结果,也可以将其转换为数组:
function * generateCombis(data) {
if (data.length === 0) return yield [];
let [arr, ...rest] = data;
for (let val of arr) {
for (let combi of generateCombis(rest)) {
yield [val, ...combi];
}
}
}
let data = [
[1,2,3],
[4,5,6],
[7,8]
];
let result = Array.from(generateCombis(data));
console.log(result);
推荐阅读
- clickhouse - Clickhouse 内存问题
- javascript - TensorFlowJs - 无法加载图像并将其从资产转换为张量
- python - 在另一台笔记本电脑上克隆环境时出现 Conda HTTP 错误
- python - 如何在标点符号前自动删除空格
- python - 有什么方法可以获取网络应用用户 IP 地址
- python - 脚本创建文件后的 Errno 13
- sql - 如何从住院患者表中对再入院病例进行子集化,以计算 SQL Server 17 中再入院病例的总住院时间?
- html - 容器元素
- python - 将其转换为 ui 文件后如何在 qtdesigner 中再次编辑我的应用程序?
- javascript - 在 JSX (Gatbsy) 中以编程方式显示表情符号