利用递归思想,求字符串的全排列:
Java版:
import java.util.ArrayList;
import java.util.TreeSet;
public class PermutationTest {
public static void main(String[] args){
String string ="abcd";
ArrayList<String> arrayList = permutation(string);
for(String s : arrayList){
System.out.println(s + "\n");
}
}
public static ArrayList<String> permutation(String s){
ArrayList<String> arrayList = new ArrayList<>();
if(s == null || s.length() == 0) return arrayList;
char[] chars = s.toCharArray();
TreeSet<String> treeSet = new TreeSet<>();
permutation(chars, 0, treeSet);
arrayList.addAll(treeSet);
return arrayList;
}
public static void permutation(char[] chars, int begin, TreeSet<String> result){
if(chars == null || chars.length == 0 || begin < 0 || begin > chars.length - 1) return;
if(begin == chars.length - 1){
result.add(String.valueOf(chars));
}else {
for(int i = begin; i < chars.length; i++){
swap(chars, begin, i);
permutation(chars, begin + 1, result);
swap(chars, begin, i);
}
}
}
public static void swap(char[] x, int a, int b){
char t = x[a];
x[a] = x[b];
x[b] = t;
}
}