-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPermutationsOfString.java
More file actions
53 lines (47 loc) · 1.68 KB
/
Copy pathPermutationsOfString.java
File metadata and controls
53 lines (47 loc) · 1.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.util.Arrays;
public class PermutationsOfString {
public static void main(String[] args) {
// permutationOfStrings("abc");
// subsetOfStrings("abc");
allSubsetOfAnArray(new int[]{}, new int[]{1, 3, 5, 4, 7});
}
private static void permutationOfStrings(String word) {
permute("", word);
}
private static void subsetOfStrings(String word) {
subset("", word);
}
private static void permute(String soFar, String word) {
if (word.length() == 0) {
System.out.println(soFar);
} else {
for (int i = 0; i < word.length(); i++) {
String next = soFar + word.charAt(i);
String remaining = word.substring(0, i) + word.substring(i + 1);
permute(next, remaining);
}
}
}
private static void subset(String soFar, String rest) {
if (rest.equalsIgnoreCase("")) {
System.out.println(soFar);
} else {
subset(soFar + rest.charAt(0), rest.substring(1));
subset(soFar, rest.substring(1));
}
}
private static void allSubsetOfAnArray(int[] soFar, int[] rest) {
if (rest.length == 0) {
for (int i : soFar) {
System.out.print(i);
}
System.out.println("");
} else {
int[] newArray = new int[soFar.length + 1];
System.arraycopy(soFar,0,newArray,0,soFar.length);
newArray[soFar.length] = rest[0];
allSubsetOfAnArray(newArray, Arrays.copyOfRange(rest, 1, rest.length));
allSubsetOfAnArray(soFar, Arrays.copyOfRange(rest, 1, rest.length));
}
}
}