位1的个数

#算法/位运算

191. 位1的个数

目录

1. 思路一:先转成二进制字符串

var hammingWeight = function (n) {
    let str = n.toString(2);

    let res = 0;
    for (let c of str) {
        if (c === "1") {
            res++;
        }
    }
    return res;
};

2. 思路二:n & (n-1) 消除二进制中最后一个 1

n & (n-1) 这个操作是算法中常见的,作用是 消除 n 数字的二进制表示 中的最后一个 1 ,见下图:

image.png|504

image.png|584

// 用一个循环不停地消除 1 同时计数,直到 n 变成 0 为止
var hammingWeight = function(n) {
    var res = 0;
    while (n != 0) { 
        n = n & (n - 1); 
        res++;
    }
    return res;
};