LeetCode 筆記 - 78. Subsets
題目在此 78. Subsets
給定一個數列,請產生出所有可能的子數列
解題思維
迭代法
首先以一個 empty list 開始
當走訪到一個新數字時,就把這個新數字加到過去所有結果後面即可
由於每多一個新數字 O(N),結果就會變成原來的兩倍 $O(N * 2^N)$
所以最終的 time complexity 為 $O(N * 2^N)$
程式碼
1 | class Solution: |
位元運算
本宅在這裡提供另一種解法,是利用位元運算來解決這個問題。
因為每個數字有兩種狀態:要或不要,所以對於一個有 n 個元素的集合,總共有 $2^n$ 種子集組合。
我們可以使用一個整數來表示每一種組合,這個整數的二進位表示法中的每一位對應到集合中的一個元素:
如果某一位是 1,表示我們選擇了對應的元素;
如果是 0,表示我們沒有選擇該元素。
程式碼
1 | class Solution: |