package problems;

import java.util.*;

public class Permutations2 {
    public List<List<Integer>> permuteUnique(int[] num) {
        if (num.length <= 0)
            return new ArrayList<List<Integer>>();
        
        Arrays.sort(num);
        List<Integer> A = new ArrayList<Integer>();
        for (int k : num)
            A.add(k);
        return permute(A);
    }
    
    List<List<Integer>> permute(List<Integer> A) {
        List<List<Integer>> re = new ArrayList<List<Integer>>();
        if (A.size() == 1) {
            List<Integer> list = new ArrayList<Integer>();
            list.add(A.get(0));
            re.add(list);
            return re;
        }
        
        for (int i = 0; i < A.size(); i++) {
            if (i > 0 && A.get(i) == A.get(i-1))
                continue;
            int t = A.remove(i);
            List<List<Integer>> b = permute(A);
            for (int j = 0; j < b.size(); j++)
                b.get(j).add(0, t);
            re.addAll(b);
            A.add(i, t);
        }
        return re;
    }
    
    public static void main(String[] args) {
        Permutations2 pm = new Permutations2(); 
        
        int[] num = {1, 1, 3};
        
        List<List<Integer>> out = pm.permuteUnique(num);        
        System.out.println(out.toString());
    }
}

@@ -139,16 +139,31 @@
 (num
+ == null %7C%7C num
 .length 
 %3C= 0
@@ -158,17 +158,17 @@
 .length 
-%3C
+=
 = 0)%0A   
@@ -219,42 +219,8 @@
 ();%0A
-        %0A        Arrays.sort(num);
 %0A   
@@ -242,21 +242,25 @@
 er%3E 
-A
+list
  = new 
-Array
+Linked
 List
@@ -289,17 +289,17 @@
 or (int 
-k
+t
  : num)%0A
@@ -314,15 +314,50 @@
     
-A
+list
 .add(
-k
+t);%0A        Collections.sort(list
 );%0A 
@@ -374,25 +374,28 @@
 urn permute(
-A
+list
 );%0A    %7D%0A   
@@ -387,28 +387,24 @@
 ist);%0A    %7D%0A
-    
 %0A    List%3CLi
@@ -471,18 +471,19 @@
 teger%3E%3E 
-re
+out
  = new A
@@ -586,32 +586,33 @@
 ayList%3CInteger%3E(
+A
 );%0A            l
@@ -614,47 +614,16 @@
     
-lis
+ou
 t.add(
-A.get(0));%0A            re.add(
 list
@@ -640,26 +640,27 @@
      return 
-re
+out
 ;%0A        %7D%0A
@@ -659,25 +659,16 @@
       %7D%0A
-        %0A
         
@@ -752,9 +752,11 @@
 et(i
--
+ - 
 1))%0A
@@ -846,17 +846,17 @@
 teger%3E%3E 
-b
+B
  = permu
@@ -883,36 +883,27 @@
 or (
-int j = 0; j %3C b.size(); j++
+List%3CInteger%3E L : B
 )%0A  
@@ -920,16 +920,9 @@
     
-b.get(j)
+L
 .add
@@ -945,18 +945,19 @@
     
-re
+out
 .addAll(
 b);%0A
@@ -952,17 +952,17 @@
 .addAll(
-b
+B
 );%0A     
@@ -1010,18 +1010,19 @@
 urn 
-re
+out
 ;%0A    %7D%0A
     
@@ -1017,20 +1017,16 @@
 ;%0A    %7D%0A
-    
 %0A    pub
@@ -1110,26 +1110,17 @@
 ions2();
- %0A        
+%0A
 %0A       
@@ -1137,26 +1137,20 @@
  = %7B
+ 
 1, 1, 3
+ 
 %7D;%0A
-        
 %0A   
@@ -1202,24 +1202,16 @@
 ue(num);
-        
 %0A       

Update Permutation 2