版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/L1558198727/article/details/88896626
__builtin_popcount
class Solution {
public:
vector<int> countBits(int num) {
vector<int>ret;
for(int i=0;i<=num;i++){
ret.push_back(__builtin_popcount(i));
}
return ret;
}
};
n&(n-1)
class Solution {
public:
int cal(int num){
int cnt = 0;
while(num){
num&=num-1;
cnt++;
}
return cnt;
}
vector<int> countBits(int num) {
vector<int>ret;
for(int i=0;i<=num;i++){
ret.push_back(cal(i));
}
return ret;
}
};
n&(n-1)
n-1的时候 右往左数 第一个右面的0都变成1,这一个1 变成0
和n进行位与 则少了最后一个1
看能进行多少次这样的操作就是有多少个1