方法一:bitset容器
class Solution {
public:
vector<int> countBits(int n) {
vector<int> ans;
for(int i=0;i<=n;i++){
bitset<32> bs(i);
ans.push_back((int)bs.count());
}
return ans;
}
};
方法二:位运算
class Solution {
public:
//如果当前数i为偶数,则它是i/2左移1位后的结果 ,即i的二进制数中1的个数和i/2一样
//如果当前数1位奇数,则它是i/2左移1位后+1的结果,即i的二进制数中1的个数=(i/2)的个数+1
vector<int> countBits(int n) {//位运算
vector<int> ans(n+1,0);
for(int i=1;i<=n;i++){
ans[i]=ans[i>>1]+(i&1);
}
return ans;
}
};
&优先级很低,需要括号