幂集:集合中所有可能的元素组合,包括空集
对于任意一个子集,集合中的元素只有两种状态,在这个子集中或者不在这个子集中,因此我们可以用二叉树来表示这种状态
左子树代表保留该元素,右子树代表舍弃该元素
如 集合 [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)