1.字符串全排序
//字符串排列,和4个数字 全排列出现5的次数那个题目有相似点,只不过那道题目从后面往前找比较合适 /* * 递归法: * 分成两部分:第一个位置 第二个到最后位置 * 第一步:所有可能出现的字符放在第一个位置----第一层for循环,然后把第一位置的字符与后面的字符交换 * 第二步:对于第二个位置的字符,也是这样操作,所有出现在该位置上的字符,然后把他和后面的进行交换 * 第k步:出现在k位置上的字符,也是这样操作,所有出现在该位置上的字符,把他和后面的进行交换 * 知道交换到最后一个位置,添加到结果集,得到一组数组 */ public ArrayList<String> Permutation(String str) { ArrayList<String> res=new ArrayList(); if(str==null||str.length()==0) return res; char[] cs=str.toCharArray(); TreeSet<String> set=new TreeSet();//set可剔重,可排序 permutation(cs,0,set); res.addAll(set); return res; } public void permutation(char[] cs,int begin,TreeSet<String> res){ if(cs==null||cs.length==0||begin<0||begin>cs.length-1) return; if(begin==cs.length-1){ res.add(String.valueOf(cs));//找到一个解 }else{ for(int i=begin;i<cs.length;i++){ swap(cs,begin,i); permutation(cs, begin+1, res); swap(cs, begin, i);//复位 } } } public void swap(char[] c,int i,int j){ char t=c[i];c[i]=c[j];c[j]=t; } 2、字符串组合
