位1的个数

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


示例 1:
输入: 11
输出: 3
解释: 整数 11 的二进制表示为 00000000000000000000000000001011
示例 2:
输入: 128
输出: 1
解释: 整数 128 的二进制表示为 00000000000000000000000010000000

 

public int HammingWeight(uint n) {
    if(n == 0) return 0;
    uint num = 0;
    while(n != 1)
    {
        num += n % 2;
        n /= 2;
    }

    return (int)(num + 1);
}


余2表示的是取n最左位的值,而除2是表示n右移一位。最后剩下一位1,所以结果+1。

等同于:

public int HammingWeight(uint n) {
    if(n == 0) return 0;
    uint num = 0;
    while(n != 1)
    {
        num += (n & 1);
        n = (n>>1);
    }

    return (int)(num + 1);
}

首页 我的博客
粤ICP备17103704号