此代码遍历数组获取数组项的子集,
并将某些数字推送到result
数组。我只是无法弄清楚这个if
语句如何过滤数字:
if( (mask & (1 << i)) !== 0){
result.push(input[i]);
究竟是什么意思?
(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)
debug(i)
do{
if( (mask & (1 << i)) !== 0){
result.push(input[i]);
}
}while(i--);
debug(result);
}
})(['1','2','3']);
答案 0 :(得分:0)
mask
变量似乎是用于从input
数组中选择数字子集的变量。假设输入的大小为N
,掩码为N
位数。因此,input[i]
仅在i
位mask
为1时才会被选中。
mask & (1 << i)) !== 0
检查掩码的i
位是否为0。如果不是0,那么input[i]
将被放入result
。