题目描述
给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。
解析
动态规划,将当前的数的最后一位去掉,然后判断去掉的最后一位是0还是1。
public int[] countBits(int n) {
int[] res = new int[n + 1];
// 1101 = 110 + 1 (3 = 2 + 1)
// 1010 = 101 + 0 (2 = 2 + 0)
for (int i = 1; i <= n; i++) {
res[i] = res[i >> 1] + (i & 1);
}
return res;
}