所有代码均通过G++编译器测试,仅为练手纪录。
//面试题28:字符串的排序
//题目:输入一个字符串,打印出该字符串中字符的所有排列。
// 例如输入字符串“ abc”,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bca,cab和cba。
//面试题28:字符串的排序
//题目:输入一个字符串,打印出该字符串中字符的所有排列。
// 例如输入字符串“ abc”,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bca,cab和cba。
bool isSwap(char *str, int begin, int k)
{
bool bSwap = true;
for (int i = begin; i < k; ++i)
{
if (str[i] == str[k])
{
bSwap = false;
break;
}
}
return bSwap;
}
void PrintStrPermutationImpl(char *pStr,int nBegin,int nEnd)
{
if(nEnd-1 == nBegin)
{
LogInfo("permutation: %s",pStr);
}
else
{
for(int i = nBegin; i < nEnd; ++i)
{
if(isSwap(pStr,nBegin,i))
{
char temp = pStr[i];
pStr[i] = pStr[nBegin];
pStr[nBegin] = temp;
PrintStrPermutationImpl(pStr, nBegin+1,nEnd);
temp = pStr[i];
pStr[i] = pStr[nBegin];
pStr[nBegin] = temp;
}
}
}
}
void PrintStrPermutation(char *pStr,int nSize)
{
if(NULL == pStr || nSize <= 0)
{
return;
}
PrintStrPermutationImpl(pStr,0,nSize-1);
}
void TestPrintStrPermutation()
{
char szBuff[] = "baaa";
PrintStrPermutation(szBuff,sizeof(szBuff));
}
ZhaiPillary
2017-01-07