- 题目描述:
-
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串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啊。
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
using namespace std; bool next_permutation(string &s) {
int n = s.length();
bool res = false;
if (n < ) return res;
int a, b;
for (a = n - ; a >= ; --a) {
if (s[a] < s[a + ]) {
res = true;
break;
}
}
for (b = n - ; b > a; --b) {
if (s[a] < s[b]) {
break;
}
}
char tmp = s[a];
s[a] = s[b];
s[b] = tmp;
reverse(s.begin() + a + , s.end());
return res;
} int main() {
string s;
while (cin >> s) {
sort(s.begin(), s.end());
do {
printf("%s\n", s.c_str());
} while (next_permutation(s));
}
return ;
}
/**************************************************************
Problem: 1369
User: hupo250
Language: C++
Result: Accepted
Time:150 ms
Memory:1520 kb
****************************************************************/