class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
def dfs(path, residual):
if len(residual) == 0:
results.append(path[:])
seen = set()
for i, num in enumerate(residual):
if num not in seen:
seen.add(num)
path.append(num)
dfs(path, residual[:i] + residual[i + 1:])
path.pop()
results = []
dfs([], nums)
return results