27.输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
//使用全排列+容器排序的方法
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
public class Solution {
public ArrayList<String> Permutation(String str) {
List<String> list = new ArrayList<>();
char[] ch = str.toCharArray();
if(str!=null&&str.length()!=0){
PermutationHelper(ch,0,list);
Collections.sort(list);
}
return (ArrayList)list;
}
//全排列:递归+回溯法
public void PermutationHelper(char[] ch,int i,List<String> list){
if(i==ch.length-1){
String var = String.valueOf(ch);
if(!list.contains(var)){
list.add(var);
}
return;
}else{
for(int j=i;j<ch.length;j++){
swap(ch,i,j);
PermutationHelper(ch,i+1,list);
swap(ch,i,j);
}
}
}
void swap(char[]ch,int i,int j){
char temp;
temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
}