package com.anuragkapur.pie.recursion;
import java.util.ArrayList;
import java.util.List;
/**
* @author anuragkapur
*/
public class Permutations {
public List<String> getPermutations(String str) {
PermutationsComputer permutationsComputer = new PermutationsComputer(str);
permutationsComputer.permute();
return permutationsComputer.getPermutations();
}
private class PermutationsComputer {
String input;
boolean used[];
StringBuilder permutation;
List<String> permutations;
public PermutationsComputer(String str) {
if (str != null) {
input = str;
used = new boolean[str.length()];
permutation = new StringBuilder();
permutations = new ArrayList<>();
}
}
public void permute() {
if (input == null) {
return;
}
if (permutation.length() == input.length()) {
permutations.add(permutation.toString());
} else {
for (int i = 0; i < input.length(); i++) {
if (!used[i]) {
permutation.append(input.charAt(i));
used[i] = true;
permute();
used[i] = false;
permutation.setLength(permutation.length()-1);
}
}
}
}
public List<String> getPermutations() {
return permutations;
}
}
}