解法:动态规划
奇数的二进制表示一定比前面偶数多一个 1,多的就是最低位的 1;
偶数的二进制表示中 1 的个数一定和除以 2 之后的那个数一样多,因为最低位是 0。
class Solution {
public:
vector<int> countBits(int num) {
vector<int> dp(num+1);
for(int i=1;i<=num;i++){
if(1 & i) //奇数
dp[i]=dp[i-1]+1;
else //偶数
dp[i]=dp[i/2];
}
return dp;
}
};