Leetcode 338 位元位計數 C

2021-10-07 15:48:26 字數 527 閱讀 4219

給定乙個非負整數 num。對於 0 ≤ i ≤ num 範圍中的每個數字 i ,計算其二進位制數中的 1 的數目並將它們作為陣列返回。

示例 1:

輸入: 2

輸出: [0,1,1]

示例 2:
輸入: 5

輸出: [0,1,1,2,1,2]

動態規劃

我們先考慮4個數,0、1、2、3

顯然,2可以看作是在0的基礎上在左邊加了乙個1;3可以看作是在1的基礎上在左邊加了乙個1。我們現在考慮第i位,假設b=2^i,那麼num這個數就可以看作是在num-b這個數字上的高i位上加了乙個1。

我們令dp[i]表示數字i的1的個數

dp[i] = dp[i-b]+1。詳細過程見**

vector<

int>

countbits

(int num)

i =0;

b *=2

;}return dp;

}

leetcode 338 位元數計位

給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 高階 思路 對於任意乙個十進位制數來說,有兩種情況。1 奇數,當乙個數為奇數的時候,它對...

leetcode338 位元位計數

給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 高階 思路 首先是乙個數減1,對應二進位制的變化就是最右的乙個1變為0,而這個1右邊的所...

Leetcode 338 位元位計數

給定乙個非負整數num。對於0 i num範圍中的每個數字i,計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2輸出 0,1,1 示例 2 輸入 5輸出 0,1,1,2,1,2 高階 要求演算法的空間複雜度為o n 你能進一步完善解法嗎?要求在c 或任何其他語言中不使用任何內建...