有重复元素的排列问题
- 万幸不是打印出每个排列,只知道dfs没有重复的元素全排列,这种待学习。
- 没有考虑到复杂度,只是自己觉得好写
- 主要就是用map存储元素,这样有函数直接确定map中是否重合,不用每次都找是否存在了。
- 排列个数:所有元素/(重复次数*2)
代码:
#include<bits/stdc++.h>
using namespace std;
int jc(int n)//阶乘函数
{
int s;
if(n==1) return 1;
else return n*jc(n-1);
}
int main()
{
map<char,int>m;
char s[1000];
scanf("%s",s);
int t=0;
int num=0;
for(int i=0;i<strlen(s);i++){
if(!m.count(s[i])){
t++;
m[s[i]]=t;
}
else num++;
}
if(num!=0)
cout<<jc(strlen(s))/(num*2);
else
cout<<jc(strlen(s));
}
集合划分问题
- 递归,找到递归公式就ok了