字符串的排列
字符串的排列
http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7
字符串的排列
思路分析:
思路其实和查找路径的思路是一样的,就是不断的拼接子路径(其实是子排序)
举个例子来说:string str = "abc" ;
那么进行三轮 第一轮是- a ,bc
- a ,b , c
a ,c , b - a + bc
a + cb
之后就是把b提出来继续的操作,如果是重复的话,直接让他跳过就好了
public ArrayList<String> Permutation(String str) { ArrayList<String> res = new ArrayList<>() ; if (!str.equals("")){ if (str.length()>1){ StringBuilder stringBuilder = new StringBuilder(str) ; //转成stringbuilder方便操作 for (int i=0;i<stringBuilder.length();i++){ //遍历取字符的各个情况 if (i+1<stringBuilder.length()&&stringBuilder.charAt(i)==stringBuilder.charAt(i+1)){ //重复的情况 continue; }else { String temp = String.valueOf(stringBuilder.charAt(i)); StringBuilder nstr = new StringBuilder(str) ; nstr.delete(i,i+1); ArrayList<String> preres = Permutation(nstr.toString()); for (int j=0;j<preres.size();j++){ //取到子路径的集合 res.add(temp+preres.get(j)); //用当前的str和子路径的集合一一拼接就好 } } } }else if(str.length()==1) { res.add(str); return res ; } }else { res.clear(); } return res ; }