求幂集(数组的所有子集)

幂集:集合中所有可能的元素组合,包括空集
对于任意一个子集,集合中的元素只有两种状态,在这个子集中或者不在这个子集中,因此我们可以用二叉树来表示这种状态
左子树代表保留该元素,右子树代表舍弃该元素
如 集合 [1,3,4]
[]
1 []
1,3 1 3 []
1,3,4 1,3 1,4 1 3,4 3 4 []
这棵树的层数是n+1

代码部分我当时理解起来蛮费劲的,主要还是通过回溯法。
建立数组subset存储子集,初始为空,代表根节点。分别对subset进行添加元素(保留操作)和不添加元素(舍弃元素)进行深度优先搜索。
给出代码 python
 1 class Solution:
 2 
 3     def findSubsequences(self, nums):
 4         res = []
 5         def dfs(x,subset):
 6             if x>=len(nums):
 7                 res.append(subset[:])
 8                 return
 9             subset.append(nums[x])
10             dfs(x+1,subset)
11             subset.pop()
12             dfs(x+1,subset)
13         dfs(0,[])
14         return res
15 if __name__ == '__main__':
16     s = Solution()
17     res = s.findSubsequences([1,2])
18     print(res)
原文地址:https://www.cnblogs.com/bianque/p/13561190.html