统计从 0 ~ n 每个数的二进制表示中1的个数

统计从 0 ~ n 每个数的二进制表示中1的个数

问题

给定一个非负整数num。每一个数字我范围在0≤≤num计算1的二进制表示的数量和返回一个数组。

Input: 5
Output: [0,1,1,2,1,2]

代码

对于数字 6(110),它可以看成是 4(100) 再加一个 2(10),因此 dp[i] = dp[i&(i-1)] + 1;

public int[] countBits(int num) {
    int[] ret = new int[num + 1];
    for(int i = 1; i <= num; i++){
        ret[i] = ret[i&(i-1)] + 1;
    }
    return ret;
}

 上一篇
数组中唯一一个不重复的元素 数组中唯一一个不重复的元素
数组中唯一一个不重复的元素问题 这个题目说的是,给你一个数组求数组中唯一一个不重复的元素。 Input: [4,1,2,1,2] Output: 4 代码 两个相同的数异或的结果为 0,对所有数进行异或操作,最后的结果就是单独出现的那个数。
2019-01-05
下一篇 
翻转一个数的比特位 翻转一个数的比特位
翻转一个数的比特位问题 给定32位无符号整数的反位。 输入:00000010100101000001111010011100 输出:00111001011110000010100101000000 说明:输入的二进制字符串0000001
2019-01-05
  目录