例如给定[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
中进行,还是应该编写第二个函数来删除重复的集合?