第一种
class Solution {
public int[] countBits(int num) {
int[] a = new int[num+1];
for(int i=0;i<=num;i++){
a[i] = a[i >> 1] + (i&1);
}
return a;
}
}
这里写成
(x & 1) //即表示偶数值为0,奇数值为1
第二种
假设有,则有
,
,
,以此类推。
class Solution {
public int[] countBits(int num) {
int[] a = new int[num+1];
a[0] = 0;
int b =1;
for(int i=1;i<num+1;i++){
int x = i -b;
while(x >= b){
b = b << 1;
x = i - b;
}
a[i] = a[x] + 1;
}
return a;
}
}