Skip to content

Commit c2ca366

Browse files
committed
LC#46, clean code-returns all permutations of given array of numbers
1 parent 605bc0f commit c2ca366

File tree

1 file changed

+44
-10
lines changed

1 file changed

+44
-10
lines changed

β€ŽLeetcode/medium/Permutations46.javaβ€Ž

Lines changed: 44 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,67 @@
55

66
public class Permutations46 {
77

8-
public static List<List<Integer>> permute(int[] nums) {
8+
public static List<List<Integer>> permute1(int[] nums) {
99
List<List<Integer>> list = new ArrayList<>();
1010
ArrayList<Integer> templist = new ArrayList<>();
11-
12-
permute(nums, templist, list);
13-
11+
12+
permute1(nums, templist, list);
13+
1414
return list;
1515
}
1616

17-
private static void permute(int[] nums, List<Integer> temp, List<List<Integer>> list) {
18-
17+
private static void permute1(int[] nums, List<Integer> temp, List<List<Integer>> list) {
18+
1919
if (temp.size() == nums.length) {
2020
list.add(new ArrayList<>(temp));
2121
return;
2222
}
23-
23+
2424
for (int i = 0; i < nums.length; i++) {
2525
if (temp.contains(nums[i]))
2626
continue;
2727
temp.add(nums[i]);
28-
29-
permute(nums, temp, list);
30-
28+
29+
permute1(nums, temp, list);
3130
temp.remove(temp.size() - 1);
3231
}
3332
}
3433

34+
// O(N!) Time - using visited mark
35+
public static List<List<Integer>> permute(int[] nums) {
36+
37+
List<List<Integer>> result = new ArrayList<>();
38+
boolean[] visited = new boolean[nums.length];
39+
40+
backtrack(nums, visited, new ArrayList<Integer>(), result);
41+
42+
return result;
43+
}
44+
45+
private static void backtrack(int[] nums, boolean[] visited, ArrayList<Integer> permutations,
46+
List<List<Integer>> result) {
47+
48+
if (permutations.size() == nums.length) {
49+
result.add(new ArrayList<>(permutations)); // deep-copy
50+
return;
51+
}
52+
53+
for (int i = 0; i < nums.length; i++) {
54+
55+
if (visited[i] == true)
56+
continue;
57+
58+
permutations.add(nums[i]);
59+
visited[i] = true;
60+
61+
backtrack(nums, visited, permutations, result);
62+
63+
permutations.remove(permutations.size() - 1); // remove recently
64+
// visited
65+
visited[i] = false;
66+
}
67+
}
68+
3569
public static void main(String[] args) {
3670
int[] nums = { 1, 2, 3 };
3771
System.out.println(permute(nums));

0 commit comments

Comments
Β (0)