题目:
刚刚写了一篇有分析的,然而。。。。上传失败,我的小心灵很受伤,决定直接发代码.....有空再写完整版的分析.....简单来说,就是 一个数X的1的个数(countBit(X)),满足 countBit(X)=countBit(2^N)+countBit(X-2^N),用迭代,复杂度O(n)
class Solution {
public:
vector<int> countBits(int num) {
int x,m1,m2;
vector<int> res;
if(num<2){
if(num<0){
return res;
}
if(num==0){
res.push_back(0);
return res;
}
if(num==1){
res.push_back(0);
res.push_back(1);
return res;
}
}
res.push_back(0);
res.push_back(1);
m1=1;m2=2;
for(int i=2;i<=num;i++){
if (i==m2){
x=1;
m2*=2;
m1*=2;
}
else{
x=res[m1]+res[i-m1];
}
res.push_back(x);
}
return res;
}
};