1、位运算
我们可以使用位运算来计算二进制串中1的个数。由于异或的性质,0与0异或为0,0与1异或为1,我们可以将n与0进行异或操作,而后逐位判断是否为1,最终将结果进行累加即可。
class Solution {
public:
int hammingWeight(uint32_t n) {
uint32_t base = 00000000000000000000000000000000;
uint32_t temp = base ^ n;
int res = 0;
while (temp) {
res += temp & 1;
temp >>= 1;
}
return res;
}
};
2、位运算优化
我们还可以使用 n & ( n − 1 ) n\&(n-1) n&(n−1),此时会将n二进制串中最末尾1置为0。因此我们当n不为0时进行循环,并不断累加出现次数即可。
class Solution {
public:
int hammingWeight(uint32_t n) {
int res = 0;
while (n) {
n &= n - 1;
++res;
}
return res;
}
};