我需要实现一个函数,它得到一个由n个元素组成的数组a和一个数字k作为输入,并返回一个数组,其中包含a的所有大小k的子集(每个子集将是一个数组本身)。
定义函数的类型,并为函数实现至少3个测试(使用assert)。它应该使用javascript/typescript和函数
例如:funsubsets([1,2,3],2)=>[[1,2],[1,3],[2,3]]
有什么想法吗?

最佳答案

对于临时结果集,可以使用具有一个以上参数的生成器函数。

function* subsets(values, size, parts = []) {
    var i;

    size--;
    for (i = 0; i < values.length; i++) {
        if (size) {
            yield* subsets(values.slice(i + 1), size, [...parts, values[i]]);
        } else {
            yield [...parts, values[i]];
        }
    }
}

console.log([...subsets([1, 2, 3], 2)]);
console.log([...subsets([1, 2, 3, 4, 5], 2)]);

.as-console-wrapper { max-height: 100% !important; top: 0; }

10-06 04:07