输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
//字符串的排列
public class Try92 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
System.out.println(Permutation(s1));
}
static Set<String> set=new TreeSet<String>();
public static ArrayList<String> Permutation(String str) {
ArrayList<Integer> index=new ArrayList<Integer>();
ArrayList<String> list=new ArrayList<String>();
if(str==null) return list;
char c[]=str.toCharArray();
int length=str.length();
for(int i=0;i<length;i++){
index.add(i);
}
for(int i=0;i<length;i++){
ArrayList<Integer> myIndex=new ArrayList<Integer>(index);
myIndex.remove((Object)i);
String buf=c[i]+"";
solve(c,myIndex,buf);
}
Iterator<String> value = set.iterator();
while (value.hasNext()) {
String s = value.next();
list.add(s);
}
//list.addAll(set);
return list;
}
public static void solve(char[] c,ArrayList<Integer> index,String buf){
if(index.size()==0) {
set.add(buf);
return;
}
for(int i=0;i<index.size();i++){
ArrayList<Integer> myIndex=new ArrayList<Integer>(index);
String info=buf+c[index.get(i)];
myIndex.remove((Object)index.get(i));
solve(c,myIndex,info);
}
}
}