【题目】输入一个字符串,按字典序打印出该字符串中字符的所有排列。
例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
结果请按字母顺序输出。
package com.exe5.offer;
import java.util.ArrayList;
import java.util.Collections;
/**23
* 输入一个字符串,按字典序打印出该字符串中字符的所有排列。
* 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
* 结果请按字母顺序输出。
* @author WGS
*
*/
public class SequenceOfArrays {
public ArrayList<String> permutation(String str){
ArrayList<String> list=new ArrayList<String>();
if(str==null || str.length()<=0)
return list;
list=permutation(list,str.toCharArray(),0,str.length());
Collections.sort(list);
return list;
}
private ArrayList<String> permutation(ArrayList<String> list, char[] str, int begin, int length) {
if(begin==length-1){
if(!list.contains(String.valueOf(str))){
list.add(String.valueOf(str));
}
}else{
for(int i=begin;i<length;i++){
if(i==begin || str[i]!=str[begin]){
swap(str,begin,i);
permutation(list,str,begin+1,length);
swap(str,begin,i);
}
}
}
return list;
}
private void swap(char[] str, int begin, int i) {
char temp=str[begin];
str[begin]=str[i];
str[i]=temp;
}
public static void main(String[] args) {
SequenceOfArrays s=new SequenceOfArrays();
String str="abc";
ArrayList<String> list=s.permutation(str);
for (String s2 : list) {
System.out.println(s2+" ");
}
}
}