链接
思路
1、库函数(也称面试官回去等通知法)
Java 中的 Integer.bitCount(int n) 方法可以统计整数中 1 的个数
2、按位与n-1
将n 与 n - 1进行按位与运算,即可将n中最右边的1变成0,进行多少次这样的运算,则n的二进制中就有多少个1
3、按位与1
将n与1进行按位与,如果结果为1,则count+1,否则不用管,然后将n进行无符号右移(切记!!!无符号),如果有符号右移测试用例:11111111111111111111111111111101
会超出时间限制或结果错误
代码
库函数
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
return Integer.bitCount(n);
}
}
按位与n-1
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n)
{
int count = 0;
while (n != 0)
{
count++;
n &= (n - 1);
}
return count;
}
}
按位与1
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n)
{
int count = 0;
while (n != 0)
{
if ((n & 1) == 1)
{
count++;
}
n >>>= 1;
}
return count;
}
}