题目:给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。
半天才读懂题,最后返回的数组中每个索引对应的值是前N个数二进制1的个数
思路:
当前数为偶数时,它二进制1的个数为 num/2 的二进制中1的个数;
当前数为奇数时,它二进制1的个数为前一个数二进制1的个数+1;
代码:
public int[] countBits(int n) {
int[] arr = new int[n + 1];
for (int i = 0; i <= n; i++){
if (i % 2 == 0){
arr[i] = arr[i / 2];
}else {
arr[i] = arr[i - 1] + 1;
}
}
return arr;
}