方法一:二进制位运算
var hammingWeight = function(n) {
let res = 0;
for (let i = 0; i < 32; i++) {
if ((n & (1 << i)) !== 0) { // 用一个只有一位为1的二进制数与n与运算
res++; // 不等于0,即为1,故res++
}
}
return res;
};
时间复杂度-> O(n)
方法二:位运算优化
存在运算 n&(n-1) 其结果恰好为将n中最低位1变为0之后的结果(0不变) 例:6&(6-1)=4,6=110,4=100,若不断的进行n&(n-1)运算直到n为0,运算次数就等于1的个数
var hammingWeight = function(n) {
let res = 0;
while (n) {
n &= n - 1;
res++;
}
return res;
};
时间复杂度-> O(logn)