字符串的排列

字符串的排列

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;
    }
}
全部评论

相关推荐

11-24 11:23
门头沟学院 C++
点赞 评论 收藏
分享
蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务