读入一个整数 ,用其各位数字生成全排列,把重复出现的去掉,并且按从小到大的顺序输出。
#include<bits/stdc++.h>
using namespace std;
long long n,b[10000],vis[10000],a[10000],cnt=0;
string k[10000];
bool find(string s){
for(int i=1;i<=cnt;i++){
if(k[i]==s){
return 1;
}
}
return 0;
}
int dfs(long long cur){
//cout<<cur<<endl;
if(cur>n){
string s;
for(int i=1;i<=n;i++){
s+=b[i];
}
if(find(s)==1){
return 0;
}else{
cnt++;
k[cnt]=s;
for(int i=1;i<=n;i++){
cout<<b[i];
}
}
cout<<endl;
return 0;
}
for(int i=1;i<=n;i++){
//cout<<"cur "<<b[cur]<<" "<<a[i]<<endl;
if(vis[i]==0){
b[cur]=a[i];
vis[i]=1;
dfs(cur+1);
vis[i]=0;
}
}
}
int main(){
string k;
cin>>k;
n=k.size();
for(int i=0;i<n;i++){
a[i+1]=k[i]-'0';
}
sort(a+1,a+n+1);
dfs(1);
return 0;
}