-4

在学习面试时,我只想分享一个关于如何在 javascript 中生成集合的所有唯一子集的示例。

4

1 回答 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 回答