[Solved] Given a collection of numbers, nums, that might contain duplicates, return all possible unique permutations in any order.

Table of Contents

Question

Given a collection of numbers, nums, that might contain duplicates, return all possible unique permutations in any order.

Example 1:

Input: nums = [1,1,2]
Output:
[[1,1,2],
 [1,2,1],
 [2,1,1]]

Example 2:

Input: nums = [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

Constraints:

  • 1 <= nums.length <= 8
  • -10 <= nums[i] <= 10

Python Solution

class Solution:
    def permuteUnique(self, nums):
        if len(nums)==0:
            return []
        result = []
        nums.sort()
        return self.recursive(nums,0,result)
    
        
    def recursive(self, nums, start, result):
        myset = set()
        if start>=len(nums)-1:
            #print(start,nums)
            result.append(nums[:])
            return result
        
        for i in range(start,len(nums)):
            #print(start,i)
            if nums[i] not in myset:
                myset.add(nums[i])
                nums[start], nums[i] = nums[i], nums[start]
                self.recursive(nums,start+1,result)
                nums[start], nums[i] = nums[i], nums[start]
            
        return result

Leave a Reply

Your email address will not be published. Required fields are marked *