# 78. Subsets **难度: Medium** ## 刷题内容 > 原题连接 * https://leetcode.com/problems/subsets > 内容描述 ``` 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], [] ] ``` ## 解题方案 > 思路 1 每次拿一个,跟res里面的每一个已有列表取并集再次插入res中 ```python class Solution(object): def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ res = [[]] for num in nums: res.extend([tmp+[num] for tmp in res]) return res ``` > 思路 2 BackTrack 标准解法版 对每个元素,有两种可能,加入 cur_lst 和不加入 cur_lst,写起来思路还是很清爽的 ```python class Solution(object): def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ nums.sort() res = [] def search(cur_lst, idx): if idx == len(nums): res.append(cur_lst) return search(cur_lst + [nums[idx]], idx + 1) search(cur_lst, idx + 1) search([], 0) return res ``` > 思路 3 DFS ```python class Solution(object): def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ nums.sort() res = [] def dfs(depth, start, lst): res.append(lst) if depth == len(nums): return for i in range(start, len(nums)): dfs(depth+1, i+1, lst+[nums[i]]) dfs(0, 0, []) return res ```