前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符串的排列

字符串的排列

作者头像
用户3003813
发布2018-09-06 13:19:35
3990
发布2018-09-06 13:19:35
举报
文章被收录于专栏:个人分享个人分享

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 

代码语言:javascript
复制
public ArrayList<String> Permutation(String str) {
        ArrayList<String> result = new ArrayList<String>();
        if (str == null || str.length() > 9 || str.length()==0) {
            return result;
        }
        str = str.trim();
        Permutation(str.toCharArray(), 0, result);
//      HashSet<String> hs = new HashSet<String>(result);  //此仅去重,没有字典序排列,可能错误
//      new ArrayList<String>(hs);
        Collections.sort(result);  //字典序排列  有些oj要求
        return result;
 
    }
 
    public static void Permutation(char[] data, int beginIdx,ArrayList<String> result) {
        if (beginIdx == data.length) {
            result.add(new String(data));
        } else {
            for (int i = beginIdx; i < data.length; ++i) {
                //有重复字符时,跳过
                if(i!=beginIdx && data[i]==data[beginIdx]) continue;
                //当i==begin时,也要遍历其后面的所有字符;
                //当i!=begin时,先交换,使第begin位取到不同的可能字符,再遍历后面的字符
                char temp = data[beginIdx];
                data[beginIdx] = data[i];
                data[i] = temp;
                 
                Permutation(data, beginIdx + 1, result);
                 
                //为了防止重复的情况,还需要将begin处的元素重新换回来           恢复打扫战场,恢复为原来子串, data共享
                temp = data[beginIdx];
                data[beginIdx] = data[i];
                data[i] = temp;
                 
                /* 举例来说“b(acd)” acd排列 ,为什么使用了两次swap函数?    函数栈变化恢复 ,  "acd第一次输出 cda后,完全退栈 返回data应该还是acd"
                                             交换栈                       退栈
                        bacd       bacd
                        bcad       bcad
                        bcda 打印  -> bcda
                */
            }
        }
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-11-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档