78:子集

问题描述

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。

示例

输入: nums = [1,2,3]
输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

这题有意思,我们可以用77题的结果代码,稍加改巴改巴就能解决。
不过这样做的话好像有点…耍赖皮。好吧。
我们扫描nums,遇到一个数就把当前结果集中的所有子集加上该数组成新的子集,遍历完毕即是所有子集。

AC代码1

class Solution:
    def subsets(self, nums):
        self.nums = nums
        n = k = len(nums)
        self.combine(n,k)
        return self.res
    def combine(self, n: int, k: int):
        nums = self.nums
        self.used = [False for i in range(n)]
        self.res = [[]]
        for i in range(1,k+1):
            self.solution(nums, [], 0, len(nums), i)
        print(self.res)
        return self.res
    def solution(self,nums,curs,left,right,depth):
        for i in range(left,right):
            if self.used[i] or right - i + len(curs) < depth:
                continue
            curs.append(nums[i])
            self.used[i] = True
            if len(curs) < depth:
                self.solution(nums,curs,i+1,right,depth)
            else:
                self.res.append(curs[:])
            curs.pop()
            self.used[i] = False
s = Solution()
s.subsets([2,3,4])

AC代码2

class Solution:
    def subsets(self, nums):
        res = [[]]
        for i in nums:
            for r in res[:]:
                res.append(r+[i])
        return res
s = Solution()
print(s.subsets([2,3,4]))
发布了333 篇原创文章 · 获赞 22 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41687289/article/details/103684025