LeetCode 338 位元位計數

2022-06-05 08:18:09 字數 699 閱讀 9929

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

輸入:5

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

class solution 

private:

int counter(int n)

return ans;

}};

這裡使用了n = n & (n - 1)這個統計二進位制1個數的技巧。

class solution 

private:

vectorres;

int counter(int n)

};

由於res中儲存了數字n前的所有結果,所以可以作為遞迴的memo使用。遞迴的返回結果為counter(n >> 1) + (n & 1),當輸入為偶數時,右移;輸入為奇數時,最低位為1,則右移後結果需要加上1。

class solution 

};

帶記憶的遞迴能很容易地轉化為動態規劃,很容易從遞迴的遞推方程轉化到動態規劃的狀態轉移方程。

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 或任何其他語言中不使用任何內建...