题意

O(n)复杂度计算0到num每个数字二进制表示中1的个数。

思路

  1. 找出最优子结构:当计算二进制为n位的数字时,n-1位的所有情况已经计算过了
  2. 推出状态转移方程:ans[i] = ans[i>>1]+(i&1)

代码

1
2
3
4
5
6
7
8
public class Solution {
public int[] countBits(int num) {
int[] ans = new int[num+1];
for(int i = 1;i <= num;i++)
ans[i] = ans[i>>1]+(i&1);
return ans;
}
}

留言

2017-01-25

⬆︎TOP