Description:
Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.
Solution:
每个数字都可以看做是a+b,期中a是小于这个数字,并且是2的k次方最大的数字。
public class Solution {
public int[] countBits(int num) {
int[] arr = new int[num + 1];
arr[0] = 0;
if (num == 0)
return arr;
arr[1] = 1;
int biggest = 1;
for (int i = 2; i <= num; i++) {
if (biggest * 2 == i) {
arr[i] = 1;
biggest *= 2;
continue;
}
arr[i] = arr[i - biggest] + 1;
}
return arr;
}
}