题目
题解一
动态规划——最低设置位
public static int[] countBits(int n) {
int [] nums = new int[n+1];//存放1的个数
nums[0]=0;
for (int i = 1; i <=n ; i++) {
nums[i] = nums[i & (i-1)]+1;
}
return nums;
}
题解二
分奇数和偶数:
public static int[] countBits(int n) {
int [] nums = new int[n+1];//存放1的个数
nums[0]=0;
for (int i = 1; i <=n ; i++) {
if (i % 2==0) {
nums[i] = nums[i/2];
}
else {
nums[i] = nums[i-1]+1;
}
}
return nums;
}