问题:求一个字符串的所有组合。
解答:题意很清楚,是求一个字符串的所有组合,属于中学数学知识的范畴,如给定字符串str="abc",则他的所有组合有:a、b、c、ab、ac、bc、abc。交换两个字符时虽然能得到两个不同的排列,但是却属于同一个组合,比如ab和ba是不同的排列,但是只能算一个组合。
#include "stdafx.h"
#include <vector>
void Permutation(char* pStr, std::vector<char> path);
void Permutation(char* pStr)
{
if(pStr == NULL)
return;
std::vector<char> path;
Permutation(pStr, path);
}
void Permutation(char* pStr, std::vector<char> path)
{
if(*pStr=='\0')
{
std::vector<char>::iterator iter = path.begin();
for(;iter!=path.end();++iter)
printf("%c",*iter);
printf("\n");
}
else
{
Permutation(pStr+1, path);
path.push_back(pStr[0]);
Permutation(pStr+1, path);
path.pop_back();
}
}
// ====================测试代码====================
void Test(char* pStr)
{
if(pStr == NULL)
printf("Test for NULL begins:\n");
else
printf("Test for %s begins:\n", pStr);
Permutation(pStr);
printf("\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
Test(NULL);
char string1[] = "";
Test(string1);
char string2[] = "a";
Test(string2);
char string3[] = "ba";
Test(string3);
char string4[] = "kjIhfedcba";
Test(string4);
return 0;
}