这道题目就相当于每次i的值等于边界k的时候,就将k*=2,然后下一轮的数值就从0开始新的累加直到i为k的时候结束当前的循环,且ans[i-k/2]因为是从头开始循环,其值均已经存储在了数组之中,可直接取。
class Solution {
public:
vector<int> countBits(int n) {
//这道题目就相当于每次i的值等于边界k的时候,就将k*=2,然后下一轮的数值就从0开始新的累加
//直到i为k的时候结束当前的循环,且ans[i-k/2]因为是从头开始循环,其值均已经存储在了数组之中,可直接取。
vector<int> ans(n+1,0);
int i=0,k=1;
while(i<n)
{
if(++i==k)
{
k*=2;
ans[i]=1;
}
else ans[i]=1+ans[i-k/2];
}
return ans;
}
};