LeetCode 78. Subsets (子集)
阿新 • • 發佈:2018-11-29
原題
Given a set of distinct integers, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: nums = [1,2,3]
Output:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
Reference Answer
思路分析
解題思路:碰到這種問題,一律dfs。
此題設定了一個引數depth
class Solution:
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if not nums:
return [[]]
self.res = []
nums.sort()
self.dfs(nums, 0, 0, [])
return self.res
def dfs(self, nums, depth, start_index, temp_res):
self.res.append(temp_res)
if depth == len(nums):
return
for i in range(start_index, len(nums)):
self.dfs(nums, depth+1, i+1, temp_res + [nums[i]])
Note:
- 既想在python中直接完成回溯,list又沒法直接用
list +count
list + [count]
代替,方法很巧妙(回溯法中不能在return 語句語句中用list.append(count)
,這種方式回溯不到新增count元素之前的狀態,前面已經試驗過很多次了,具體可參看本部落格的 回溯法模型 一文)。 - 結合index,新增
depth
引數進行輔助回溯,很應景!