题解 | #字符串的排列#

字符串的排列

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

递归,图片说明
每次将第一个字符与第i个字符对换,

for(int i = 0; i< str.length();i++){
    if(i == 0 || str.charAt(i) != str.charAt(0)){
        //将第一个字符与第i个字符对换
        char temp = str.charAt(i);
        str.setCharAt(i, str.charAt(0));
        str.setCharAt(0, str.charAt(i));
        ....
        //完事之后记得再将原来的字符调换回去
        str.setCharAt(0, str.charAt(i));
        str.setCharAt(i, temp);
    }
}

所以总体代码如下:

public ArrayList<String> Permutation(String str) {
        StringBuilder stringBuilder = new StringBuilder(str);
        ArrayList<String> result = permutationHelper(stringBuilder);
        for (String resultString :
                result) {
            System.out.println(resultString);
        }
        return result;
    }

    public ArrayList<String> permutationHelper(StringBuilder str){
        ArrayList<String> result = new ArrayList<>();
        if (str.length() == 1){
            result.add(str.toString());
        }else {
            for (int i = 0; i < str.length(); i++) {
                if (i == 0 || str.charAt(i) != str.charAt(0)){
                    char temp = str.charAt(i);
                    str.setCharAt(i, str.charAt(0));
                    str.setCharAt(0, str.charAt(i));
                    ArrayList<String> newResult = permutationHelper(new StringBuilder(str.substring(1)));
                    for (String resultString :
                            newResult) {
                        result.add(temp+resultString);
                    }
                    str.setCharAt(0, str.charAt(i));
                    str.setCharAt(i, temp);
                }
            }
        }
        return result;
    }
全部评论

相关推荐

牛客77743221...:做一段时间,公司出钱送你去缅甸和泰国旅游
点赞 评论 收藏
分享
11-13 20:16
已编辑
厦门理工学院 软件测试
专业嗎喽:硕佬,把学校背景放后面几段,学校背景双非还学院,让人看了就不想往下看。 把实习经历和个人奖项放前面,用数字化简述自己实习的成果和掌握的技能,比如负责项目一次通过率90%,曾4次发现项目潜在问题风险为公司减少损失等等
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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