题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
解题思路:
使用递归的方法,第一步将字符串的第一个字符和后面的每个字符交换产生第一位遍历所有中可能的字符串,第一步将第一步生成的字符串的第一位不动,第二位和后面的各位互换,第三步将前两步生成的字符串的前两位不动,第三位和后面的互换,一次递归,最后得到每个字符都是所有种排列方式的字符串。
代码(java):
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Collections;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> res=new ArrayList<String>();
char []strArray=str.toCharArray();
permu(res,strArray,0);
Collections.sort(res);
return res;
}
public void permu(ArrayList<String> res,char []str,int start){
if(start==str.length-1){
String result=String.valueOf(str);
if(res.indexOf(result)<0){
res.add(result);
}
}
else{
for(int i=start;i<str.length;i++){
char tmp=str[i];
str[i]=str[start];
str[start]=tmp;
permu(res,str,start+1);
tmp=str[i];
str[i]=str[start];
str[start]=tmp;
}
}
return;
}
}