相比子集问题,多了一个限制条件就是不能有重复,对应代码部分为先对nums排序,然后在for循环中判断i和startIndex关系,若大于且nums[i] == nums[i-1],则跳过当前选择
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
path = []
paths = []
def backtrack(nums, startIndex):
paths.append(path[:])
if startIndex == len(nums):
return
for i in range(startIndex, len(nums)):
if i > startIndex and nums[i] == nums[i-1]:
continue
path.append(nums[i])
backtrack(nums, i+1)
path.pop()
nums.sort()
backtrack(nums, 0)
return paths