组合数:
思路:采取递归遍历的方式,比如对于字符串abcd,对每一个当前字符进行选取或者不选取的操作。递归终止条件是判断选择字符个数已经达到m, 即C(n,m)。
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<stack>
#include<set>
using namespace std;
//set数据结构用来去重,可以保证结果中没有重复组合
set<string> res;
void com_number(string str,int len,int m,string result){
//此处需要注意,str进来为空时,有可能result的长度恰好等于m,所以不能直接返回
if(m==0) return;
if(result.length() == m) {
sort(result.begin(),result.end());
res.insert(result);
}
//将长度为0检测放置在string的erase函数之前放置出错
if(len==0) return;
char t = str[0];
string tmp = str.erase(0,1);
//不选
com_number(tmp,len-1,m,result);
//选
result += t;
com_number(tmp,len-1,m,result);
}
int main(){
string str;
// cin>>str;
str = &#