递归,
每次将第一个字符与第i个字符对换,
for(int i = 0; i< str.length();i++){
if(i == 0 || str.charAt(i) != str.charAt(0)){
//将第一个字符与第i个字符对换
char temp = str.charAt(i);
str.setCharAt(i, str.charAt(0));
str.setCharAt(0, str.charAt(i));
....
//完事之后记得再将原来的字符调换回去
str.setCharAt(0, str.charAt(i));
str.setCharAt(i, temp);
}
} 所以总体代码如下:
public ArrayList<String> Permutation(String str) {
StringBuilder stringBuilder = new StringBuilder(str);
ArrayList<String> result = permutationHelper(stringBuilder);
for (String resultString :
result) {
System.out.println(resultString);
}
return result;
}
public ArrayList<String> permutationHelper(StringBuilder str){
ArrayList<String> result = new ArrayList<>();
if (str.length() == 1){
result.add(str.toString());
}else {
for (int i = 0; i < str.length(); i++) {
if (i == 0 || str.charAt(i) != str.charAt(0)){
char temp = str.charAt(i);
str.setCharAt(i, str.charAt(0));
str.setCharAt(0, str.charAt(i));
ArrayList<String> newResult = permutationHelper(new StringBuilder(str.substring(1)));
for (String resultString :
newResult) {
result.add(temp+resultString);
}
str.setCharAt(0, str.charAt(i));
str.setCharAt(i, temp);
}
}
}
return result;
} 


京公网安备 11010502036488号