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.
Example 1:
Input: 2
Output: [0,1,1]
Example 2:
Input: 5
Output: [0,1,1,2,1,2]
思路:
利用了i&(i - 1), 这个本来是用来判断一个数是否是2的指数的快捷方法,比如8,二进制位1000, 那么8&(8-1)为0,只要为0就是2的指数。我们可以发现每个i值都是i&(i-1)对应的值加1。
代码如下:
public int[] CountBits(int num) {
int[] n = new int[num + 1];
n[0] = 0;
for (int i = 1; i <= num; i++)
{
n[i] = n[i & (i - 1)] + 1;
}
return n;
}