去重的全排序

/*
去重的全排列。。。再看看别人的代码,感觉差距好大。
*/
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

void permutation(string input);

int main()
{
	string input="aabc";
	permutation(input);
	return 0;
}

void permutation(string input)
{
	cout<<input<<endl;
	while(true){
		int idx=-1;
		for(int i=input.size()-1;i>0;--i){
			if(input[i-1]<input[i]){
				idx=i-1;
				break;
			}
		}
		if(idx==-1) break;
		char X='z';
		int C;
		for(int j=input.size()-1;j>idx;--j){
			if(input[j]<=input[idx])continue;
			if(input[j]<=X){
				C=j;
				X=input[j];
			}
		}
		swap(input[C],input[idx]);
		int len=input.size()-1-idx;
		for(int k=1;k<=(len/2);++k)
			swap(input[idx+k],input[input.size()-k]);
		cout<<input<<endl;
	}
}

你可能感兴趣的:(算法,全排列)