题解 | #全排列#

全排列

http://www.nowcoder.com/practice/5632c23d0d654aecbc9315d1720421c1

递归:

abc的全排列 = a开头bc的全排列 + b开头ac的全排列 + c开头ab的全排列

其中,bc的全排列 = b开头c的全排列 + c开头b的全排列

以此类推......


#include<bits/stdc++.h>
using namespace std;
void fullRank(string pre, string str){
    if(str.size() == 1){//递归终止条件,只剩一个字母的全排列
        cout << pre + str << endl;
        return ;
    }
    //继续递归
    string nextpre = "";
    string nextstr = "";
    for(int i = 0; i < str.size(); i++){
        nextpre = pre + str[i];
        nextstr = str;
        nextstr.erase(i, 1);//剔除该字母
        fullRank(nextpre, nextstr);
    }
}
int main(){
    string str = "";
    cin >> str;
    /*
    递归:
    abc的全排列 = a开头bc的全排列 + b开头ac的全排列 + c开头ab的全排列
    其中,bc的全排列 = b开头c的全排列 + c开头b的全排列
    以此类推......
    */
    fullRank("", str);
    return 0;
}

全部评论
感谢,思路与您一样,但是在写递归函数时没考率周全如何传参,看了您的解答后醍醐灌顶
点赞
送花
回复
分享
发布于 2022-04-01 20:32
厉害!我自己想的不清晰,没想到用erase可以在字符串的任意位置删除字符,没想到写出来可以这么简洁,那个for循环里的东西我要理一理:)
点赞
送花
回复
分享
发布于 02-26 10:51 河北
网易互娱
校招火热招聘中
官网直投
思路清晰啊,大佬
点赞
送花
回复
分享
发布于 03-14 10:34 安徽

相关推荐

24 1 评论
分享
牛客网
牛客企业服务