描述
给出一个 非负 整数 num,对所有满足 0 ≤ i ≤ num
条件的数字 i 均需要计算其二进制表示中数字 1 的个数并以数组的形式返回。
样例
样例1
输入: 5
输出: [0,1,1,2,1,2]
解释:
0~5的二进制表示分别是:
000
001
010
011
100
101
每个数字中1的个数为: 0,1,1,2,1,2
样例2
输入: 3
输出: [0,1,1,2]
思路:这是一道非常有意思的题目,每次只用关心最后一位就好了,子状态就是当前数值/2的count数量。
public class Solution {
/**
* @param num: a non negative integer number
* @return: an array represent the number of 1's in their binary
*/
public int[] countBits(int num) {
int[] arr = new int[num+1];
for(int i=0;i<=num;i++){
if(i%2==1) arr[i] = arr[i/2]+1;
else arr[i] = arr[i/2];
}
return arr;
}
}