Back to all solutions

#47 - Permutations II

Problem Description

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

Solution

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permuteUnique = function(nums) {
  const result = new Set();
  backtrack(result, nums);
  return Array.from(result).map(s => s.split(','));
};

function backtrack(result, nums, order = []) {
  if (!nums.length) {
    result.add(order.join());
  } else {
    for (let i = 0; i < nums.length; i++) {
      backtrack(
        result,
        [...nums.slice(0, i), ...nums.slice(i + 1)],
        [...order, nums[i]],
      );
    }
  }
}