字符串的排列
字符串的排列
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;
}
}
查看20道真题和解析