[Leetcode解題] Subsets - dfs解
11 February 2022
medium
recusion
dfs
題目
78. Subsets 這是一道關於「子集」的題目。給定一個整數數組 nums,其中所有元素均為唯一的,請返回所有可能的「子集」(即集合的幂集)。 解決方案集不得包含重複的子集。您可以以任意順序返回解決方案。
解題思路
這個題目需要我們返回一個數組的所有子集。我們可以使用深度優先搜索來解決這個問題。
我們定義一個名為dfs
的函數,它接受兩個參數:$start$和$path$。$start$是搜索的起點,$path$是當前搜索的路徑。
首先,我們將當前路徑添加到結果列表中,然後遍歷整個數組,從當前起點開始。對於每個數字,我們呼叫dfs
函數,傳遞$i + 1$作為下一個起點和$path + [nums [i]]$作為新的路徑。
最後,我們以[]作為起始路徑自訂dfs(0,[])
,並返回結果列表。
實作
以下是一個使用回溯法的 Python 解決方案:
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
result = []
n = len(nums)
def dfs(start, path):
result.append(path)
for i in range(start, n):
dfs(i + 1, path + [nums[i]])
dfs(0, [])
return result
複雜度
本題的時間複雜度是 $O(2^n * n)$,其中 $n$ 是 $nums$ 數組的長度。
實際上,因為每個元素只需要添加到結果集一次,所以實際的時間複雜度比理論時間複雜度略低,大約為 $O(2^n * n)$。