时间限制: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;
}