题目:
给你一个整数数组 nums ,返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。
示例 1:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0]
输出:[[],[0]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets
思路:
- 个人觉得这道题没有说清楚,整数数组是否会含有重复数字,如果是的话那官方题解也是有问题的,需要先去重才行。
- 迭代法:遍历元素,将该元素添加到目前所有存在的子集中,组成新的子集
- 递归回溯:遍历元素,缩小遍历范围即可生成不同长度的子集,同时将子集添加到结果中
代码:
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
'''
# 迭代法:
res = [[]]
# 将每个子集都加上遍历到的元素组成新子集
for i in nums:
res += [[i]+ r for r in res]
return res
'''
# 递归回溯
res = []
def helper(i, temp):
# 添加子集
res.append(temp)
for j in range(i, len(nums)):
helper(j+1, temp+[nums[j]])
helper(0, [])
return res