题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
在线代码:
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> result=new ArrayList<String>();
//边界条件的处理
if(str==null||str.length()>9||str.length()==0){
return result;
}
str=str.trim();//去除空格
Permutation(str.toCharArray(),0,result);//递归调用
Collections.sort(result);
return result;
}
public void Permutation(char[] charnum,int start,ArrayList<String> result){
if(start==charnum.length){//如果长度为0的处理
result.add(new String(charnum));
}else{
for(int i=start;i<charnum.length;++i){
if(i!=start&&charnum[i]==charnum[start])continue;//有重复的字符则继续
//交换位置
char temp=charnum[start];
charnum[start]=charnum[i];
charnum[i]=temp;
//递归调用
Permutation(charnum,start+1,result);
//
temp=charnum[start];
charnum[start]=charnum[i];
charnum[i]=temp;
}
}
}
}