day04-二进制中1的个数

77 阅读1分钟

二进制中1的个数

题目描述:

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 [汉明重量]

示例:

输入:n = 11 (控制台输入 00000000000000000000000000001011) 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。

解法:

/**
 * @param {number} n - a positive integer
 * @return {number}
 */
//   解法1:借助字符串和数组的转化
var hammingWeight = function(n) {
        const res=n.toString(2);
        return res.split('0').join("").length
};

// 解法2:位运算--按位比较
var hammingWeight = function(n) {
    let res=0;
    for(let i=0;i<32;i++){
        if(n&(1<<i)){
            res++;
        }
    }
    return res;
};

// 解法3:位运算优化--利用n&n-1 每次去掉一个1  看看循环了多少次变为0
var hammingWeight = function(n) {
    let res=0;
    while(n){
        n&=n-1;
        res++;
    }
    return res;
};

写在后面的话:

位运算真的很有魔力 太巧妙了 题目链接:leetcode.cn/problems/er…