题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
解题思路:https://blog.csdn.net/jiaobuchong/article/details/85369970这篇文章的解释很清楚。
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> lists = new ArrayList<>();
if(str==null||str.length()<=0){
return lists;
}
PermutationCore(str.toCharArray(),0,lists);
Collections.sort(lists);
return lists;
}
private void PermutationCore(char[] charArray, int i, ArrayList<String> lists) {
// TODO Auto-generated method stub
if(i == charArray.length-1){
String val = String.valueOf(charArray);
if(!lists.contains(val)){
lists.add(String.valueOf(charArray));
}
}
for(int j=i;j<charArray.length;j++){
char temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
PermutationCore(charArray, i+1, lists);
temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
}
}
}