在学习访谈时,我只想分享一个如何在javascript中生成集合的所有唯一子集的示例。
答案 0 :(得分:8)
实现应如下所示:
(function(input){
var result, mask, total = Math.pow(2, input.length);
for(mask = 0; mask < total; mask++){ //O(2^n)
result = [];
i = input.length - 1; //O(n)
do{
if( (mask & (1 << i)) !== 0){
result.push(input[i]);
}
}while(i--);
console.log(result);
}
})(['a','b','c','d','e','f']);
这里的想法是使用从0到n的数字(n是输入数组的长度),提取每个位以决定是否选择元素。
例如,如果您有[a,b,c]作为输入,则数字将从0开始重复 - >在图5中,二进制它们将是000,001,010,011,100,101,110,111,其结果将是,c,b,bc,a,ac,ab,abc。
总运行时间为O(n2 ^ n)。