题解 | #全排列#这种方法比较好想到

全排列

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

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stack>
#include <map>
using namespace std;

/**
	finished 已经完成的字符串
	left 还没完成的字符串
*/
void pailie(string finished, string left) {
    if (left == "") { //全部都完成了
        cout << finished << endl;
        return;
    }

    string nextf = finished;
    string nextl = left;
  
    for (int i = 0; i < left.size(); i++) { //依次遍历未完成的
        nextf += nextl[i]; //把未完成的加入到已完成的字符串中
        nextl = nextl.erase(i, 1); //删除掉该字符
        pailie(nextf, nextl); //继续递归调用
	  
	   //回溯
        nextl.insert(i, 1, nextf[nextf.size() - 1]); 
        nextf = nextf.substr(0, nextf.size() - 1);

    }
    return;
}

int main() {

    string s;
    getline(cin, s);
    sort(s.begin(), s.end());
    pailie("", s);

}

全部评论

相关推荐

SinyWu:七院电话面的时候问我有没有女朋友,一听异地说你赶紧分。我:???
点赞 评论 收藏
分享
冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务