与首个字符交换

字符串的排列

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;
        }

    }
全部评论

相关推荐

斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务