class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
ans = []
nums = sorted(nums)
self.dfs(nums, 0, [], ans)
return ans
def dfs(self, nums, index, path, ans):
ans.append(path)
for i in range(index, len(nums)):
if i != index and nums[i] == nums[i-1]:
continue
self.dfs(nums, i+1, path + [nums[i]], ans)
Time complexity is O(n* 2^n). Space complexity is 0(1).