获取具有重复数字但不包含重复集合的所有排列

时间:2018-07-13 04:32:13

标签: javascript

例如给定[1,2,2]的输出应该是

[
    [1],
    [2],
    [2,2],
    [1,2],
    [1,2,2],
]

因此,2可以在同一输出中出现两次,因为它两次在输入中出现,但是{em> 不能被认为[1,(first 2)][1,(second 2)]是不同的。

我想出了如何将每个元素都视为唯一元素:

function *getPermutations(arr) {
    if(arr.length === 1) {
        yield arr;
    } else if(arr.length === 2) {
        yield arr;
        yield [arr[0]];
        yield [arr[1]];
    } else if(arr.length >= 3) {
        const left = arr.slice(0,2);
        const right = arr.slice(2);

        for(const l of getPermutations(left)) {
            yield l;
            for(const r of getPermutations(right)) {
                yield l.concat(r);
            }
        }

        for(const r of getPermutations(right)) {
            yield r;
        }
    }
}

但是现在我正在尝试找出是否有一种算法可以做到没有重复集。

这是否可以在getPermutations中进行,还是应该编写第二个函数来删除重复的集合?

0 个答案:

没有答案