From a84eb5c7f2b39b18873583e309181d3762123c63 Mon Sep 17 00:00:00 2001 From: Atousa Duprat Date: Wed, 19 May 2021 18:03:43 -0700 Subject: [PATCH] permutation with duplicate --- Recursion/PermutationWithDuplicate.java | 46 +++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Recursion/PermutationWithDuplicate.java diff --git a/Recursion/PermutationWithDuplicate.java b/Recursion/PermutationWithDuplicate.java new file mode 100644 index 0000000..47cf062 --- /dev/null +++ b/Recursion/PermutationWithDuplicate.java @@ -0,0 +1,46 @@ +import java.util.*; + +//leetcode 47 permutation 1, 2 +public class PermutationWithDuplicate { + + + public static List> permuteUnique(int[] nums) { + + List slate = new ArrayList<>(nums.length); + List> result = new ArrayList<>(); + permuteHelper(nums, 0, slate, result); + return result; + } + + public static void permuteHelper(int[] nums, int numsIdx, List slate, List> result) { + if (nums.length == numsIdx) { + result.add(new ArrayList<>(slate)); + return; + } + Set m = new HashSet<>(); + for (int i = numsIdx; i < nums.length; i++) { + if (!m.contains(nums[i])) { + swap2(nums, i, numsIdx); + slate.add(nums[numsIdx]); + m.add(nums[numsIdx]); + permuteHelper(nums, numsIdx+1, slate, result); + swap2(nums, i, numsIdx); + slate.remove(slate.size() - 1); + } + } + } + + public static void swap2(int[] nums, int v1, int v2){ + int temp = nums[v2]; + nums[v2] = nums[v1]; + nums[v1] = temp; + } + + public static void main (String[]args){ + int[] a = {1, 1, 2,2}; + List> result = permuteUnique(a); + System.out.println(result); + + } + } +