給定乙個非負整數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分別是在0
和1
的基礎上高位補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右邊的所...