338. Counting Bits

这道题让我们输出从1~num这几个数的bit表达1的数量。 直接计算肯定是可以的 那么怎么得到O(N)的算法 我们可以观察

一个数的二进位表达式可以“拆分”为右移一位的1的数量和最低位 所以递推式就出来了。DP主要问题是怎么把当前的问题

拆分为同一个的小规模问题

public class Solution {
  public int[] countBits(int num) {
        int[] tab = new int[num + 1];
        //默认tab[0] = 0 所以多开一位的数组
        for(int i = 1; i <= num; i++){
            // add last bit (i&1) with the number of bits in i/2 (equivalent to i>>1)
            tab[i] = (i & 1) + tab[i >> 1];
        }
        return tab;
    }
}

results matching ""

    No results matching ""