1384 全排列

给出一个字符串S(可能有重复的字符),按照字典序从小到大,输出S包括的字符组成的所有排列。例如:S = “1312”,

输出为:

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

输入
输入一个字符串S(S的长度 <= 9,且只包括0 - 9的阿拉伯数字)
输出
输出S所包含的字符组成的所有排列
输入样例
1312
输出样例
1123
1132
1213
1231
1312
1321
2113
2131
2311
3112
3121
3211

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
using namespace std;
const double N = 1e6+10;
const double pi = acos(-1.0);
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;
int num[N];
int main()  
{  
    string s;
    cin >> s;
    for(int i = 0 ; i < s.length() ; i++)
    {
       	num[i] = s[i]-'0';
	}
	sort(num,num+s.length());
    do  
    {  
        for(int i = 0 ; i < s.length() ; i++)
		{
			cout << num[i];
		} 
		cout << endl;
    }while(next_permutation(num,num+s.length()));  
    return 0;  
}

注:
C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序、std::prev_permutation提供降序。(但是数组一定是升序的)

你可能感兴趣的:(零碎知识点,数学)