原题
给定一个含不同整数的集合,返回其所有的子集
如果 S = [1,2,3],有如下的解:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
子集中的元素排列必须是非降序的,解集必须不包含重复的子集
解题思路
- Backtracking, DFS
- 数组要排序,接着一层一层的递归,每一层列表的元素个数加一
[ ]
/ |
[1] [2] [3]
/ | |
[1, 2] [1, 3] [2, 3]
/
[1, 2, 3]
完整代码
# 递归的方法 # class Solution(object): # def subsets(self, nums): # """ # :type nums: List[int] # :rtype: List[List[int]] # """ # if nums == None: # return [] # res = [[]] # self.dfs(sorted(nums), [], 0, res) # return res # def dfs(self, nums, path, index, res): # for i in xrange(index, len(nums)): # res.append(path + [nums[i]]) # self.dfs(nums, path + [nums[i]], i+1, res) # 迭代的方法 # 循环元素,往结果列表中添加符合的元素,在循环第二个元素,并且跟之前的答案组合 # 成为新的答案元素,直到循环结束 class Solution(object): def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ nums.sort() result = [[]] for x in nums: with_x = [] for s in result: # 这里不能直接使用result,因为是循环result with_x.append(s + [x]) result += with_x return result