统计从0到n共n+1个数各有几个二进制1
硬解
class Solution {
public:
vector<int> countBits(int n) {
vector<int> ans;
for(int i = 0; i <= n; i++){
ans.push_back(countOne(i));
}
return ans;
}
int countOne(int n){
int count = 0;
while(n){
if(n & 1)
count++;
n >>= 1;
}
return count;
}
};
动态规划
class Solution {
public:
vector<int> countBits(int n) {
vector<int> dp(n+1,0);
dp[0] = 0;
for(int i = 1; i <= n; i++){
if(i & 1)
dp[i] = dp[i-1] + 1;
else
dp[i] = dp[i >> 1];
}
return dp;
}
};