//思路是找规律,动态规划的思想
//0 1
//10 11
//100 101 110 111
//bit[i] = bit[i-2^n] + 1
//2^(n+1) > i > 2^n
public int[] countBits(int num) {
int[] bit = new int[num+1];
if (num == 0){
return bit;
}
//循环的次数
int n = (int) (Math.log(num) / Math.log(2)) + 1;
for (int i = 1; i <= n; i ++){
int s = (int) Math.pow(2,i-1);
int e = (int) Math.pow(2,i) - 1;
for (int j = s; j<=e && j<=num ; j++){
bit[j] = bit[j-s] + 1;
}
}
return bit;
}
LeetCode338 比特位计数
最新推荐文章于 2022-01-14 11:34:52 发布