面试题 08.04. 幂集
题目描述:编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
方法一:遍历,遇到一个数就把所有子集加上该数组成新的子集,遍历完毕即是所有子集
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
result = []
result.append([])
for i in nums:
l = len(result)
j = 0
while j < l:
result.append(result[j]+[i])
j += 1
return result
方法二:回溯法
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
res = []
def backtrack(nums, path, res):
res.append(path)
if nums == []:
return
for i in range(len(nums)):
backtrack(nums[i+1:] , path + [nums[i]], res)
backtrack(nums, [], res)
return res