找出一个集合的子集

利用递归的思想,用python的set方法完成,找到每次去掉一个元素的所有子集,

例如 {1,2,3} 它的子集是{{1}, {2}, {3}, {1,2}, {1,3}, {2,3}},

从最基本的情况开始考虑,当 {1} 时,它的子集是 {{}, {1}}

那么考虑递归缩小问题范围,有集合{1,2,3,4,....,x},那么将第一个数拿出来,找到{2,3,4,....,x}的所有子集

再把第一个数放回去,就可以得到原本集合{1,2,3,4....x}的所有子集了。

代码如下

    def subsets(self, nums: List[int]) -> List[List[int]]:
        if len(nums) == 0:
            return [[]]
        if len(nums) == 1:
            return [nums, []]
        subset = self.subsets(nums[1:])
        res = [i for i in subset] + [s+[nums[0]] for s in subset]
        return res

 

posted @ 2018-05-29 20:17  AcodingDog  阅读(414)  评论(0编辑  收藏  举报