给一个字符串,要求输出其中每个字符的全排列,并且不能重复
输入:
aabc
输出:
aabc
aacb
abac
abca
acba
acab
baac
baca
bcaa
caba
caab
cbaa
12
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int num = 0;
/**
* 判断是否交换
*如果交换 返回1 反之为0
*/
int IsSwap(char *list, int k, int m) {
for (int i = k; i < m; i++) {
if (list[i] == list[m]){
return 0;
}
}
return 1;
}
//交换函数
void Swap( char &a, char &b) {
char temp = a;
a = b;
b = temp;
}
//递归求解全排列
void Prem(char *list, int k, int m){
if (k == m) {
for (int i = 0; i <= m; i++) {
printf("%c", list[i]);
}
printf("\n");
num++;
}
else {
for (int i = k; i <= m; i++) {
if (IsSwap(list, k, i)){
Swap(list[k], list[i]);
Prem(list, k+1, m);
Swap(list[k], list[i]);
}
else{
continue;
}
}
}
}
int main(void) {
char list[100];
scanf("%s", list);
Prem(list, 0, strlen(list)-1);
printf("%d", num);
return 0;
}