题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:递归。a的全排列是a,ab的全排列是在a的基础上加上b;abc的全排列是在ab的基础上加上c。。。
ab的全排列是在a的基础上,b在a的后面或前面,也就是与a进行位置交换。以此类推。。。
注意: 不能有重复,所以要用TreeSet存储
import java.util.ArrayList; import java.util.TreeSet; public class PermutationClass { public static void main(String[] args) { PermutationClass pc = new PermutationClass(); System.out.println(pc.Permutation("aa")); } public ArrayList<String> Permutation(String str) { ArrayList<String> list = new ArrayList<String>(); TreeSet<String> treeSet = new TreeSet<String>(); char[] buf = str.toCharArray(); Permutation(buf,0,str.length()-1,treeSet); list.addAll(treeSet); return list; } public void Permutation(char[] buf,int start,int end,TreeSet<String> treeSet) { if(start == end) { treeSet.add(new String(buf)); }else { for(int i =start;i<=end;i++) { char temp = buf[start]; buf[start] = buf[i]; buf[i] = temp; Permutation(buf,start+1,end,treeSet); temp = buf[start]; buf[start] = buf[i]; buf[i] = temp; } } } }