递归的思想:n个字符里取出m个
从头扫描字符串的第一个字符。针对第一个字符,有两种选择:要么取第一个,剩下n-1个取m-1个,要么第一不取,剩下n-1个中取m个,递归实现
//n个字符里取出m个,递归实现
//要么取第一个,剩下n-1个取m-1个,要么第一不取,剩下n-1个中取m个
void Combination(char* str, int length, vector<char>& output)
{
//递归出口
if (length==0)
{
for (auto k:output)
{
cout << k << " ";
}
cout << endl;
return;
}
if (*str =='\0')
{
return;
}
output.push_back(*str);
Combination(str + 1, length - 1, output);
output.pop_back();
Combination(str + 1, length, output);
}
void COM(char* string)
{
if (string == nullptr)
return;
int len = strlen(string);
vector<char> res; //用于保存每一种组合结果
for (int i = 1; i <= len; ++i)
{
Combination(string, i, res);
}
}
void main()
{
char a[4] = "abc";//注意字符串的保存。。。。。。。'\0'
COM(a);
}