剑指Offer JZ11 二进制中1的个数(JavaScript:数学,技巧)

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:734849
本题知识点: 数学

题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
示例1
输入
10
返回值
2

思路:技巧型
通过把二进制的1进行一一消除,达到统计的效果。
进行n&(n-1)运算,会把二进制表示中最右边的1变为0,达到消除1的目的。
例如:
1010 有两个1,
1010 &(1010-1)= 1010&1001 = 1000 消除一个1,计数1
1000 &(1000-1)=1000&0111 = 0000 消除一个1,计数2
结果 2

思路参考自:WEHAWT

function NumberOf1(n)
{
    
    
    let num = 0;
    while(n){
    
    
        num++;      
        n = n & (n - 1);
    }
    return num;
}

思路:实在型
二进制数从0开始一个一个去比对,有1的地方,flag & number会返回1,累加结果2

function NumberOf1(number) {
    
    
    let flag = 1,
        count = 0;
    while (flag) {
    
    
        count += flag & number ? 1 : 0;
        flag = flag << 1;
    }

    return count;
}

猜你喜欢

转载自blog.csdn.net/weixin_44523860/article/details/115091954
今日推荐