1
1
package LeetcodeQuestions ;
2
2
3
3
import java .util .ArrayList ;
4
+ import java .util .Arrays ;
4
5
import java .util .List ;
5
6
6
7
// https://leetcode.com/problems/permutations/
7
8
8
-
9
+
9
10
// https://github.com/shashankch/DataStructures-Algo-Java/blob/master/src/PrepStringPermuteBacktrack.java
10
11
11
12
public class permutations {
@@ -27,7 +28,7 @@ public static void permute(int[] nums, int i, List<List<Integer>> list) {
27
28
28
29
}
29
30
30
- public static void swap (int [] nums , int i , int j ) {
31
+ public static void swap (int [] nums , int i , int j ) {
31
32
int temp = nums [i ];
32
33
nums [i ] = nums [j ];
33
34
nums [j ] = temp ;
@@ -42,15 +43,58 @@ public static List<List<Integer>> helper(int[] nums) {
42
43
43
44
44
45
}
45
-
46
+
47
+
48
+ // Method 2-------------->
49
+
50
+ public static void backtrack (List <List <Integer >> list , List <Integer > tempList , int [] nums ) {
51
+ if (tempList .size () == nums .length ) {
52
+ list .add (new ArrayList <>(tempList ));
53
+ } else {
54
+ for (int i = 0 ; i < nums .length ; i ++) {
55
+ if (tempList .contains (nums [i ]))
56
+ continue ; // element already exists, skip
57
+ tempList .add (nums [i ]);
58
+ backtrack (list , tempList , nums );
59
+ tempList .remove (tempList .size () - 1 );
60
+ }
61
+ }
62
+ }
63
+
64
+ // Method 2 with duplicate values...
65
+ public static void backtrack2 (List <List <Integer >> list , List <Integer > tempList , int [] nums ,
66
+ boolean [] used ) {
67
+ if (tempList .size () == nums .length ) {
68
+ list .add (new ArrayList <>(tempList ));
69
+ } else {
70
+ for (int i = 0 ; i < nums .length ; i ++) {
71
+ if (used [i ] || i > 0 && nums [i ] == nums [i - 1 ] && !used [i - 1 ])
72
+ continue ;
73
+ used [i ] = true ;
74
+ tempList .add (nums [i ]);
75
+ backtrack2 (list , tempList , nums , used );
76
+ used [i ] = false ;
77
+ tempList .remove (tempList .size () - 1 );
78
+ }
79
+ }
80
+ }
81
+
82
+
83
+ public List <List <Integer >> helper2 (int [] nums ) {
84
+ List <List <Integer >> list = new ArrayList <>();
85
+ Arrays .sort (nums ); // sorting needed in duplicate values case
86
+ backtrack2 (list , new ArrayList <>(), nums , new boolean [nums .length ]);
87
+ return list ;
88
+ }
89
+
46
90
47
91
public static void main (String [] args ) {
48
-
92
+
49
93
int arr [] = {1 , 2 , 3 };
50
94
for (List <Integer > li : helper (arr )) {
51
95
52
96
System .out .println (li );
53
-
97
+
54
98
}
55
99
56
100
}
0 commit comments