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

全排列

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

}

全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务