【算法设计与分析】递归与分治策略及其应用–有重复元素的排列问题https://blog.csdn.net/qq_52626583/article/details/123572390?spm=1001.2014.3001.5502
这个思路太复杂了。
有界限的重复元素排列问题 直接dfs会简单很多
#include<stdio.h>
char s[550];
int num[27];
char p[550];
int n;
int sum = 0;
void dfs(int x){
if(x==n){
sum++;
printf("%s\n",p);
}else{
for(int i = 1; i <=26;i++){
if(num[i]){
p[x] = i-1 + 'a' ;
num[i]--;
dfs(x+1);
num[i]++;
}
}
}
}
int main(){
scanf("%d",&n);scanf("%s",s);
for(int i = 0; i< n;i++){
num[s[i]-'a'+1] ++;
}
dfs(0);
printf("%d",sum);
return 0;
}