计算十进制 i 对应的二进制数中 “1” 的个数

给定一个非负整数 num,对于任意 i,0 ≤ i ≤ num,计算 i 的值对应的二进制数中 "1" 的个数,将这些结果返回为一个数组。(标题只是一个数)

js 转2进制解法 :

function countBit(n) {
return n.toString(2).replace(/0/g,"").length;
}


按位判断法:

function countBit(n) {
var ret = 0;
while(n > 0) {
ret += n & 1;
n >>= 1; // 按位右移,最后 n === 0
}
return ret;
}


按位迭代法:

// 规律: countBit(n & (n - 1)) === countBit(n) - 1
function countBit(n) {
var ret = 0;
while(n > 0) {
ret++;
n &= n - 1;
}
return ret;
}


根据规律直接递推(完整版):
function countBits(nums) {
var ret = [0];
for(var i = 1; i <= nums; i++) {
ret.push(ret[i & i - 1] + 1);
}
return ret;
}