题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。按字典序打印出该字符串中字符的所有排列。
分类:字符串
解法1:遍历确定每个位置,对于abc,例如对于第一个位置,有abc,3种情况,一旦确定第一个位置,然后递归确定
public ArrayList<String> Permutation(String str) {
ArrayList<String> result = new ArrayList<String>();
char[] chars = str.toCharArray();
Arrays.sort(chars);
solve(chars, 0,result);
Collections.sort(result);
return result;
}
void solve(char[] str,int i,ArrayList<String> result){
if(i==str.length-1){
StringBuilder sb = new StringBuilder(str.length);
for(int j=0;j<str.length;j++){
sb.append(str[j]);
}
for(int j=0;j<result.size();j++){
if(result.get(j).equals(sb.toString())){
return;
}
}
result.add(sb.toString());
}
for(int j=i;j<str.length;j++){
char t = str[i];
str[i] = str[j];
str[j] = t;
solve(str, i+1,result);
t = str[i];
str[i] = str[j];
str[j] = t;
}
}