lc 338 位元位計數 dp

2021-10-25 05:25:23 字數 938 閱讀 2399

338. 位元位計數

難度中等432

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

示例 1:

輸入:2輸出:[0,1,1]
示例 2:

輸入:5輸出:[0,1,1,2,1,2]
高階:

要求演算法的空間複雜度為o(n)

你能進一步完善解法嗎?要求在c++或任何其他語言中不使用任何內建函式(如 c++ 中的__builtin_popcount)來執行此操作。

最簡單的做法,當然是:

class solution 

}return rs;

}}

要用o(n),可以通過dp實現:

(這個遞推關係很巧妙,沒做過要想到還有點難度

對於乙個數,如果他是偶數,那麼他的1的個數和他/2對應數的個數相同,比如4的二進位制:100,2的二進位制是10,之所以相同,是因為除以二相當於右移一位,而偶數的最低為一定是0

如果是奇數,那麼他一定大於0,並且,他剛好比他前面的偶數多乙個1,就是最低位那個

class solution 

dp[1]=1;

for(int i=2;i>1];}}

return dp;

}}

338 位元位計數

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

338 位元位計數

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

338 位元位計數

題目描述 給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 高階 方法1 直接對每乙個數字進行判斷 主要思路 1 對每乙個數字單獨判斷其二...