package problems.medium; import java.util.*; /** * Created by sherxon on 4/29/17. */ public class Permutations2 { public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> list = new ArrayList<>(); Set<String> set= new HashSet<>(); rec(list, nums, 0, set); return list; } void rec(List<List<Integer>> list, int[] a, int n, Set<String> set) { if (n == a.length - 1) { if(set.add(Arrays.toString(a))){ List<Integer> ll = new ArrayList<>(); for (int i = 0; i < a.length; i++) ll.add(a[i]); list.add(ll); } return; } for (int i = n; i < a.length; i++) { if(i!=n && a[i]==a[n])continue; swap(a, i, n); rec(list, a, n + 1, set); swap(a, n, i); } } private void swap(int[] a, int n, int i) { int temp = a[n]; a[n] = a[i]; a[i] = temp; } }