- 题目描述:
-
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
- 输入:
-
每个测试案例包括1行。
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
- 输出:
-
对应每组数据,按字典序输出所有排列。
- 样例输入:
-
abc BCA
- 样例输出:
-
abc acb bac bca cab cba ABC ACB BAC BCA CAB CBA
再复习一下next_permutation,最后一组测试数据9位,用cout超时,关键时候还是得printf啊。
1 #include <iostream> 2 #include <string> 3 #include <algorithm> 4 #include <cstdio> 5 using namespace std; 6 7 bool next_permutation(string &s) { 8 int n = s.length(); 9 bool res = false; 10 if (n < 2) return res; 11 int a, b; 12 for (a = n - 2; a >= 0; --a) { 13 if (s[a] < s[a + 1]) { 14 res = true; 15 break; 16 } 17 } 18 for (b = n - 1; b > a; --b) { 19 if (s[a] < s[b]) { 20 break; 21 } 22 } 23 char tmp = s[a]; 24 s[a] = s[b]; 25 s[b] = tmp; 26 reverse(s.begin() + a + 1, s.end()); 27 return res; 28 } 29 30 int main() { 31 string s; 32 while (cin >> s) { 33 sort(s.begin(), s.end()); 34 do { 35 printf("%s ", s.c_str()); 36 } while (next_permutation(s)); 37 } 38 return 0; 39 } 40 /************************************************************** 41 Problem: 1369 42 User: hupo250 43 Language: C++ 44 Result: Accepted 45 Time:150 ms 46 Memory:1520 kb 47 ****************************************************************/