给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
class Solution {
public int[] countBits(int num) {
int[] res = new int[num+1];
int mi = 1;
int pre = 1;
for(int i=1;i<=num;i++){
if(i==mi){//到达2的幂次方,1的个数为1
res[i] = 1;
pre = mi;
mi = mi<<1;
}else{
res[i] = 1+res[i-pre];//最高位的1+去掉最高位后前面得到的值
}
}
return res;
}
}