首页 > 解决方案 > 根据给定数组创建唯一对

问题描述

我无法解决这个问题。寻求算法专家的帮助。如果解决方案是用 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]
] 

标签: algorithm

解决方案


您可以使用递归函数。在这里,我选择将其实现为生成器,使用*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);


推荐阅读