https://blog.csdn.net/qianqin_2014/article/details/51598778
题目:
求字符的所有组合,例如输入abc, 则他们的所有组合有a、b、c、ab、ac、bc、abc。
分析:
如果输入n个字符,则这n个字符所构成长度为1的组合,长度为2的组合,......,长度为n的组合。求n个字符的长度为m(1<=m<=n)的组合的时候,我们把这n个字符分成两部分:第一个字符和其余的所有字符。如果组合中包含第一个字符,则下一步在剩下的字符例选取m-1个字符;如果组合里不包含第一个字符,则在剩下的字符里选取m个字符。也就是说,我们可以把求n个字符组成长度为m的组合问题分解成两部分,分别求n-1个字符串中长度为m-1的组合,以及求n-1个字符的长度为m的组合。这两种方式都可以用递归的方式解决。
static int num= 1;
void Combination(char *string, int number, vector<char> &result);
void Combination(char *string)
{
if(!string)
return;
vector<char> result;
for(size_t i=1;i<=strlen(string);i++)
Combination(string,i,result);
}
void Combination(char *string, int number, vector<char> &result)
{
if(number == 0){
printf("第%d个:\n",num++);
vector<char>::iterator iter;
for(iter=result.begin();iter!=result.end();iter++){
cout<<*iter;
}
cout<<endl;
return;
}
if(*string =='\0')
return;
result.push_back(*string);
Combination(string+1,number-1,result);
result.pop_back();
Combination(string+1,number,result);
}
https://blog.csdn.net/ns_code/article/details/26405471
https://www.cnblogs.com/AndyJee/p/4655485.html