字符串的排列
字符串的排列
http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7
按c++的思路写了遍java的代码,思路大都差不多(具体思路可以参见题解上各位大神好汉的题解,我就不当
搬运工了,只是把代码中一些地方稍加些通俗的注释,方便理解,加深记忆。
import java.util.ArrayList; import java.util.*; public class Solution { public void dfs(char[] cs,ArrayList<String> list,int s){ int len=cs.length; if(s==len){ list.add(String.valueOf(cs)); return; } for(int i=s;i<len;i++){ if(i!=s&&cs[i]==cs[s])continue; char c=cs[i];//原谅我不知道如何使用java中字符串怎么交换,使用SwapUtil(cs,i,s)发现抱错,就采用原始的交换了 cs[i]=cs[s]; cs[s]=c; dfs(cs,list,s+1); c=cs[i];//递归算法中经典的剪枝操作,目的是为了去重 cs[i]=cs[s]; cs[s]=c; } } public ArrayList<String> Permutation(String str) { ArrayList<String> list=new ArrayList<String>(); if(str.length()>0){ dfs(str.toCharArray(),list,0); Collections.sort(list);//得到的结果并不是按照字典排序,所以在此加了一个字典排序 } return list; } }