90. Subsets II (题目链接)
Medium
172375Add to ListShare
Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: [1,2,2]
Output:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
思路:
这个题中包含了重复的元素,如何去除重复元素?
先sort,每次都选择的数,直接添加进去,如果某个数在这次选择的时候不选,那么一直找到下一个不是重复数字的数。
相似的去重题目:[Leetcode] 40. Combination Sum II
[Leetcode] 47. Permutations II
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
rlt = []
nums.sort()
def dfs(start: int, subsets: List[int]):
i = start
while i < len(nums):
subsets.append(nums[i])
rlt.append(copy.deepcopy(subsets))
dfs(i + 1, subsets)
subsets.pop()
while i + 1 < len(nums) and nums[i] == nums[i + 1]:
i += 1
i += 1
dfs(0, [])
rlt.append([])
return rlt