51Nod 1384 全排列

1384 全排列

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注

描述

给出一个字符串S(可能有重复的字符),按照字典序从小到大,输出S包括的字符组成的所有排列。例如:S = “1312”,输出为:
1123
1132
1213
1231
1312
1321
2113
2131
2311
3112
3121
3211

Input

输入一个字符串S(S的长度 <= 9,且只包括0 - 9的阿拉伯数字)

Output

输出S所包含的字符组成的所有排列

Input示例

1312

Output示例

1123
1132
1213
1231
1312
1321
2113
2131
2311
3112
3121
3211

题解

STL的应用。想到全排列就想到了STL中的 next_permutation() 函数。用字符串读取输入,用 sort() 对其进行排序,再用 next_permutation() 输出结果。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <utility>
#define ll long long
#define ull_ unsigned long long

using namespace std ;

int main(){
string str ;
cin >> str ;
sort(str.begin() , str.end()) ;
cout << str << endl ;
while(next_permutation(str.begin() , str.end())){
for ( int i = 0 ; i < str.size() ; i ++ ){
cout << str[i] ;
}
cout << endl ;
}
return 0 ;
}