题目
题目链接:二进制中1的个数
题解
十进制转二进制先模后除就可以。
对于负数,我们需要输出其绝对值的补码。
当出现负数时,记录该数字为负数,取绝对值。对二进制进行遍历,判断该位是1还是0,并记录。
如果该数字是负数则输出32 - 0的个数,否则输出1的个数
(也可以直接bitCount)。
AC代码
方法1
class Solution {
public:
int NumberOf1(int n) {
bool flag = false;
if (n < 0) {
flag = true;
n = -n;
}
int z = 0, o = 0;
while (n != 0) {
int t = n % 2;
if (t==0) z++;
else o++;
n /= 2;
}
return flag ? (32 - z) : o;
}
};
方法2
class Solution {
public:
int NumberOf1(int n) {
int cnt = 0;
while (n) {
n &= (n-1);
cnt++;
}
return cnt;
}
};
方法3
class Solution {
public int NumberOf1(int n)
{
return Integer.bitCount(n);
}
}