题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public static ArrayList<String> Permutation(String str) {
ArrayList<String> orders=new ArrayList<String>();
if(str==null){
return null;
}
char [] es=str.toCharArray();
PermutationHelp(es,0,orders);
Collections.sort(orders);
return orders;
}
public static void PermutationHelp(char es[],int i,ArrayList<String>list){
if(i==es.length-1){
String now=String.valueOf(es);
if(!list.contains(now)){
list.add(now);
}
}else{
for(int j=i;j<es.length;j++){
swap(es,i,j);
PermutationHelp(es,i+1,list);
swap(es,i,j);
}
}
}
public static void swap(char[] es,int i,int j){
char temp=es[i];
es[i]=es[j];
es[j]=temp;
}
public static void main(String[] args) {
String str="abcde";
ArrayList <String>list=Permutation(str);
for(String s:list){
System.out.println(s);
}
}
}