1.暴力法 今天竟然能过
class Solution {
vector<int>dp;
public:
vector<int> countBits(int num) {
for(int i=0;i<=num;i++)
{
count(i);
}
return dp;
}
void count(int i)
{
int count=0;
while(i!=0)
{
if(i==1||i%2==1) count++;
i=i/2;
}
dp.push_back(count);
}
};
2.动归 最高位 如果是最高位新进位则(i&(i-1))==0 high=i;
否则 dp[i]=dp[i-high]+1;
class Solution {
vector<int>dp;
public:
vector<int> countBits(int num) {
dp.push_back(0);
if(num==0) return dp;
int high=0;
for(int i=1;i<=num;i++)
{
if((i&(i-1))==0) high=i;
dp.push_back(dp[i-high]+1);
}
return dp;
}
};