class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
self.res = []
tmpList = []
nums.sort()
for i in range(len(nums)+1): #len+1轮循环,每次输出长度为i的所有组合
self.backtrack(nums, tmpList, i, 0)
return self.res
def backtrack(self, nums, tmpList, k, start):
if len(tmpList) == k:
self.res.append(list(tmpList))
for i in range(start, len(nums)): #tmp的修改直接写在递归里
if i-1 >= start and nums[i-1] == nums[i]: #跳过同一层递归的重复数字
continue
self.backtrack(nums, tmpList+[nums[i]], k, i + 1)