与首个字符交换

字符串的排列

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

    }
全部评论

相关推荐

头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务