您的位置:首页 > 其它

LeetCode 78 [Subsets]

2017-03-27 11:33 357 查看

原题


给定一个含不同整数的集合,返回其所有的子集


如果 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


  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: