一个集合中没有重复元素,求该集合的所有子集。求集合的所有子集问题。题目要求子集中元素非递减序排列,因此我们先要对原来的集合进行排序。原集合中每一个元素在子集中有两种状态:要么存在、要么不存在。这样构造子集的过程中每个元素就有两种选择方法:选择、不选择,因此可以构造一颗二叉树,最后得到的叶子节点就是子集。。下面是Python代码,出现的问题用注释标出来了,如下:
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
self.sub_sets=[]
self.sub_set=[]
nums.sort()
self.dfs(nums,0)
return self.sub_sets
def dfs(self,nums,index):
if index==len(nums):
print self.sub_set #此处能够输出正确结果
self.sub_sets.append(self.sub_set)#向列表中添加子集时,为啥加入的总是[]?????
return
#选择nums[index]
self.sub_set.append(nums[index])
self.dfs(nums,index+1)
#不选择nums[index]
self.sub_set.pop()
self.dfs(nums,index+1)
s=Solution()
l=[1,2,3]
print s.subsets(l)
运行结果如下:
[1, 2, 3]
[1, 2]
[1, 3]
[1]
[2, 3]
[2]
[3]
[]
[[], [], [], [], [], [], [], []] #此处为什么全是空列表??在添加之前明明能够正常输出的!求解释。。。