奇数一定比前面那个偶数多一个 1,因为多的就是最低位的 1,偶数中 1 的个数一定和除以 2 之后的那个数一样多。因为最低位是 0,除以 2 就是右移一位,也就是把那个 0 抹掉而已,所以 1 的个数是不变的。
class Solution {
public int[] countBits(int n) {
int[] dp = new int[n + 1];
dp[0] = 0;
for(int i = 1; i <= n; i++){
if(i % 2 == 0) dp[i] = dp[i/2];
else dp[i] = dp[i - 1] + 1;
}
return dp;
}
}

被折叠的 条评论
为什么被折叠?



