问题描述
给定一组不含重复元素的整数数组 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]))