比较下面两种代码效率:
class Solution {
public:
int hammingWeight(uint32_t n) {
int _cnt = 0;
while(n>0){
_cnt ++;
n = n&(n-1);
}
return _cnt;
}
};
n&(n-1)去掉的是n的二进制序列中从右往左第一个1。
这样做不用考虑0的个数,只需要考虑1,有几个1就循环几次。
class Solution {
public:
int hammingWeight(uint32_t n) {
int _cnt = 0;
while(n>0){
_cnt += (n&1);
n>>0;
}
return _cnt;
}
};