问题
思路
比较简单,移位操作。转化为位向量去做。
代码
class Solution {
public:
int hammingWeight(uint32_t n) {
int ans = 0;
while( n ){
if( n&1 ) ++ans;
n >>= 1;
}
return ans;
}
};
当然,这个题还有更妙的答案。
思路
n&(n-1)的妙用
代码
/*
n&n-1的妙用。
n与n-1的区别在于,对于n,最低位1开始一直到右,和n-1,完全相反
n = 10-100
n-1 = 10-011
因此,n&n-1可以把n的最低位1变成0
*/
class Solution {
public:
int hammingWeight(uint32_t n) {
int cnt = 0;
while( n )
{
++cnt;
n &= n-1;
}
return cnt;
}
};