题目描述:给定一个整数n,计算0到n每个数的二进制表示中1的个数
解题思路:可以使用动态规划。一个整数可以看做离它最近的二次幂加上另一个数
重点:2次幂为0,1为1,以此类推
public class Solution { public int[] CountBits(int num) { int[] bits = new int[num + 1]; bits[0] = 0; if (num == 0) return bits; bits[1] = 1; if (num == 1) return bits; for (int i = 2; i <= num; i++) { int m = (int)Math.Log(i, 2); int closeM = (int)Math.Pow(2, m); if (closeM == i) bits[i] = 1; else { bits[i] = bits[closeM] + bits[i - closeM]; } } return bits; } }