在学习面试时,我只想分享一个关于如何在 javascript 中生成集合的所有唯一子集的示例。
问问题
2698 次
1 回答
9
实现应如下所示:
(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)。
于 2013-08-13T05:53:17.023 回答