1111import java .io .*;
1212
1313class Solution {
14+ HashMap <Integer ,Integer > counts =new HashMap <>();
1415 public List <List <Integer >> permuteUnique (int [] nums ) {
1516 List <List <Integer >> result =new ArrayList <>();
16- possiblePermutation (nums ,new ArrayList <>(),new ArrayList <>(),result );
17+
18+ HashMap <Integer ,Integer > counter =new HashMap <>();
19+ for (int num :nums )
20+ counter .put (num ,counter .getOrDefault (num ,0 )+1 );
21+
22+ possiblePermutation (nums ,new ArrayList <>(),counter ,result );
1723 return result ;
1824 }
1925
20- public void possiblePermutation (int nums [], List <Integer > arrangement , List <Integer > occur_indx , List <List <Integer >> result ){
21- if (arrangement .size ()==nums .length && ! result . contains ( arrangement )){
22- result .add (new ArrayList <>(arrangement ));
23- }
26+ public void possiblePermutation (int nums [], List <Integer > cur , HashMap <Integer , Integer > counter , List <List <Integer >> result ){
27+ if (cur .size ()==nums .length )
28+ result .add (new ArrayList <>(cur ));
29+
2430 else {
25- for (int i =0 ;i <nums .length ;i ++){
26- if (occur_indx .contains (i ))
27- continue ;
28-
29- arrangement .add (nums [i ]);
30- occur_indx .add (i );
31- possiblePermutation (nums ,arrangement ,occur_indx ,result );
32- arrangement .remove (arrangement .size ()-1 );
33- occur_indx .remove (occur_indx .size ()-1 );
31+ for (int num : counter .keySet ()){
32+ if (counter .get (num ) > 0 ){
33+ counter .put (num ,counter .get (num )-1 );
34+ cur .add (num );
35+ possiblePermutation (nums ,cur ,counter ,result );
36+ cur .remove (cur .size ()-1 );
37+ counter .put (num ,counter .get (num )+1 );
38+ }
3439 }
3540 }
3641 }
37- }
42+ }
0 commit comments