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