Description
对于给出的一个字符串,输出其所有不重复全排列
Input
一个字符串
Output
该字符串的全部不重复全排列
Sample Input
bbjd
Sample Output
bbdj
bbjd
bdbj
bdjb
bjbd
bjdb
dbbj
dbjb
djbb
jbbd
jbdb
对于给出的一个字符串,输出其所有不重复全排列
Input
一个字符串
Output
该字符串的全部不重复全排列
Sample Input
bbjd
Sample Output
bbdj
bbjd
bdbj
bdjb
bjbd
bjdb
dbbj
dbjb
djbb
jbbd
jbdb
jdbb
1.直接用next_permutation(),它不会产生重复串
直接上代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
char s[300];
int cnt;
while(scanf("%s",s) != EOF)
{
sort(s,s+strlen(s));
cnt = strlen(s);
do
{
puts(s);
}while(next_permutation(c,c+cnt));
}
return 0;
}
2.递归 先排序 再去重 (利用一个字符)
附代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int len,flag[300];
char str[300],res[300];
void dg(int x)
{
char c = 0;
if(x == len)
{
printf("%s\n",res);
return;
}
for(int i = 0;i<len;i++)
{
if(!flag[i] && c != str[i])
{
res[x] = str[i];
c = res[x];
flag[i] = 1;
dg(x + 1);
flag[i] = 0;
}
}
}
int main()
{
while(scanf("%s",str) != EOF)
{
memset(flag,0,sizeof(flag));
len = strlen(str);
sort(str,str+len);
dg(0);
}
}