1. 程式人生 > 其它 >LintCode筆記——664. 數 1

LintCode筆記——664. 數 1

技術標籤:動態規劃動態規劃

數 1

題目

LintCode664. 數 1

題目描述

給出一個 非負 整數 num,對所有滿足 0 ≤ i ≤ num 條件的數字 i 均需要計算其二進位制表示中數字 1 的個數並以陣列的形式返回。

示例一

Input

5

Output

[0,1,1,2,1,2]

示例二

Input

3

Output

[0,1,1,2]

解題思路

動態規劃
轉移方程: f(n) = f(n >> 1) + (n % 2)

  /*
  * dp, 計數, 位操作型
  * 位操作型動態規劃一般用值作為狀態
  * 轉移方程: f(n) = f(n >> 1) + (n % 2)*/
public int[] countBits(int num) { int[] dp = new int[num + 1]; dp[0] = 0; for(int i = 1; i <= num; i ++) { //i % 2的速度較慢, 可以換成i & 1, 結果是一樣的 dp[i] = dp[i >> 1] + (i % 2); } return dp; }