4:100 ----1000 8 dp[i-flag/2](flag为2^n) .此时flag为8
5:101 ----1001 9
6:110 ----1010 10
7:111 ----1011 11
1100 12 dp[i-flag/2*3]+1
1101 13
1110 14
1111 15
class Solution {
public:
vector<int> countBits(int num) {
vector<int> dp;
if(num<2)
{
for(int i=0;i<=num;i++)
{
dp.push_back(i);
}
return dp;
}
dp.push_back(0);
dp.push_back(1);
int flag=2;//flag保存2^n
for(int i=2;i<=num;i++)
{
if(i%2==0&&i/2==flag)
{
flag=i;
}
if(i<flag/2*3)
{
dp.push_back(dp[i-flag/2]);
}
else
{
dp.push_back(dp[i-flag]+1);
}
}
return dp;
}
};