难度中等455收藏分享切换为英文接收动态反馈
给你一个整数数组 nums
,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
示例 1:
输入:nums = [1,2,2] 输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
示例 2:
输入:nums = [0] 输出:[[],[0]]
提示:
1 <= nums.length <= 10
-10 <= nums[i] <= 10
解题思路:递归求解,先排序,再递归;path存的是路径,每次递归向后增加路径,不回返。其中核心是剪枝,去掉重复的eg,[2],[2],所以每次遇到和上一个相同的都不做处理。
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
def dfs(path,i):
res.append(path)
for j in range(i,len(nums)):
if j!=i and nums[j]==nums[j-1]:
continue
dfs(path+[nums[j]],j+1)
nums.sort()
res = []
dfs([],0)
return res
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
def dfs(path,i):
res.append(path)
for j in range(i,len(nums)):
if j!=i and nums[j]==nums[j-1]:
continue
dfs(path+[nums[j]],j+1)
nums.sort()
res = []
dfs([],0)
return res