027字符串的排列
题目:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
方法:回溯法
思路:
对每一个都两两进行交换,不满足就回溯继续向下交换
代码:
public ArrayList<String> Permutation(String str) {
ArrayList<String> res = new ArrayList<>();
if(str!=null||str.length()>0){
Permutation(str.toCharArray(),0,res);
}
Collections.sort(res);
return res;
}
public void Permutation(char[] chars,int i,ArrayList<String> res){
if(i==chars.length-1){
String str = String.valueOf(chars);
if(!res.contains(str)){//判断是否重复
res.add(str);
}
}else{
for (int j = i; j <chars.length ; j++) {//1.交换后进行递归,不满足就回溯
swap(chars,i,j);
Permutation(chars,i+1,res);
swap(chars,i,j);
}
}
}
public void swap(char[] chars,int a,int b){
char temp = chars[a];
chars[a]=chars[b];
chars[b]=temp;
}