二进制中1的个数
循环检查法
观察可知,二进制中某一位如果为1,需要在当前位对2取模值为1,辗转取模,非常直观
int hammingWeight(uint32_t n) {
int sum = 0;
while(n>=1){
if(n%2==1){
sum++;
}
n = n/2;
}
return sum;
}
以下方法与之前类似,只是多了一部按位与 0 求或,这个方法适用于 num 前有一大串 0 的情况,可以减少一部分循环,但是时间复杂度仍然是线性的,空间复杂度仍然是常数级
func hammingWeight(num uint32) int {
num = num | 0
count := 0
for num >= 1 {
if num % 2 == 1 {
count ++
}
num = num / 2
}
return count
}