LintCode筆記——664. 數 1
阿新 • • 發佈:2020-12-14
數 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;
}