与首个字符交换

字符串的排列

http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7

第一个字符+剩余所有字符。回溯是注意状态的恢复。

图片说明

    /**
     *输入一个字符串,按字典序打印出该字符串中字符的所有排列。
     * 例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的
     * 所有字符串abc,acb,bac,bca,cab和cba。
     * @param str 字符串
     * @return 排列得到的所有字符串
     */
    public ArrayList<String> Permutation(String str) {
        chars=str.toCharArray();
        Permutation(0);
        permutes.sort(String::compareTo);
        return permutes;
    }
    private ArrayList<String> permutes=new ArrayList<>();
    private char[] chars;
    public void Permutation(int starIndex){
        if(starIndex==chars.length-1){
            permutes.add(String.valueOf(chars));
        }
        Set<Character> set=new HashSet<>();
        for(int i=starIndex;i<chars.length;i++){
            if(set.contains(chars[i])){
                continue;
            }
            set.add(chars[i]);
            //chars[i] 固定在第 starIndex 位
            char temp=chars[i];
            chars[i]=chars[starIndex];
            chars[starIndex]=temp;
            Permutation(starIndex+1);
             temp=chars[i];
            chars[i]=chars[starIndex];
            chars[starIndex]=temp;
        }

    }
全部评论

相关推荐

07-04 16:00
门头沟学院 Java
点赞 评论 收藏
分享
06-26 15:33
青岛工学院 Java
积极的秋田犬要冲国企:他现在邀请我明天面试
点赞 评论 收藏
分享
一表renzha:手写数字识别就是一个作业而已
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务