一、题目描述

二、解题思路
我们可以借助位运算的思想来解决这个问题。通过**k=k&(k-1)**来消除k中最右边为1的比特位,每次消除后进行count++,当k为0时,表示所有的1消除完毕,此时的count即为所有1的个数。
三、代码实现
时间复杂度:T(n)=O(n*logn)
空间复杂度:S(n)=O(n)
cpp
class Solution {
public:
vector<int> countBits(int n) {
vector<int> ret;
for(int i=0;i!=n+1;i++){
int count=0;
int k=i;
while(k){
count++;
k=k&(k-1);
}
ret.push_back(count);
}
return ret;
}
};