之前没有做过位运算的题目,这次直接看书上的思路做的,两种做法:
第一种比较直观,但是有缺陷。(循环条件选取的有一些问题)
第二种时间复杂度更低。
class Solution {
public:
int NumberOf1(int n) {
int count=0;
unsigned int flag=1;
while(flag){
if( n&flag ){
count++;
}
flag = flag<<1;
}
return count;
}
};
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while(n){
n = n & (n-1);
count++;
}
return count;
}
};