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