LeetCode 0338 位元位計數

2021-10-01 10:32:50 字數 1278 閱讀 3629

給定乙個非負整數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)來執行此操作。

popcount

class

solution

return res;

}private

intpopcount

(int num)

return cnt;

}}

時間複雜度:o(k

∗n

)o(k * n)

o(k∗n)

, k為給定整數二進位制表達中1的位數;

空間複雜度:o(n

)o(n)

o(n)

。動態規劃 + 高位補一

0 | 1 | 1 2 | 1 2 2 3 | 1 2 2 3 2 3 3 4 | ...
利用已有的計數結果來生成新的計數結果。如,已知0為0;1是在0的基礎上高位補1得到的;2和3分別是在01的基礎上高位補1得到的;4、5、6、7分別是在0,1,10,11的基礎上高位補1得到的…

class

solution

cursor =0;

high <<=1;

}return res;

}}

時間複雜度:o(n

)o(n)

o(n)

空間複雜度:o(n

)o(n)

o(n)

LeetCode 位元位計數

題目描述 給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 高階 思路1 當數字n為偶數時,其相當於n 2左移一位得到,二進位制含有1的數...

leetcode 338 位元位計算(位運算)

目錄 題目描述 lowbit函式介紹 題目解析 c 完整 題目 力扣 leetcode 給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 ...

leetcode338 位元位計數

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