编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量).)。
思路1:按位枚举
因为无符号整数有32位,从右到左按位统计1的个数。
代码:
class Solution {
public:
int hammingWeight(uint32_t n) {
int ans = 0;
for(int i = 0;i < 32;i++) {
if(n&(1 << i)) {
ans++;
}
}
return ans;
}
};
思路2:二进制规律
记a = 1,则a&(a-1) = 0,a = 1110则a - 1 = 1101,a&(a-1)= 1100, 一个数a和它的减一做与运算,结果把a最后一个1消掉了。重复这个过程,可以统计出1的个数。
代码
class Solution {
public:
int hammingWeight(uint32_t n) {
int ans = 0;
while(n != 0) {
ans++;
n = n & (n - 1);
}
return ans;
}
};