leetcode(每日一题:剑指 Offer 15. 二进制中1的个数)

209 阅读1分钟

image.png

方法一:二进制位运算

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)