这个题目要做也很简单,但是我看了官方题解,发现一种基于动态规划的方式,其实用到了2进制下的一些规律【我个人感觉动态规划就是有记录,枝剪了的递归搜索】
那么根据这个思路整理出来的代码就是这样
vector<int> countBits(int num) {//比特位计数
vector<int> arr(num+1);
arr[0]=0;if(num==0)return arr;
arr[1]=1;if(num==1)return arr;
int n=2,tmp;//默认长度2,因为其中只有0,1,我们根据0,1来生成所有的bit个数
while(true){
for(int i=n;i<n*2;i++){
if(i>num)return arr;
arr[i]=(arr[i-n]+1);
//cout<<arr[i-n]+1<<" ";
//getchar();
}
n*=2;
}
//return arr;
}
最后成绩是这样的
比不了前面的神仙。。。