#include "stdafx.h"
#include <iostream>
#include <assert.h>
using namespace std;
void permutation(char *pStr, char* pBegin)
{
assert(pStr&&pBegin);
if (*pBegin == '\0')
cout << pStr << endl;
else
{
for (char* pCh = pBegin; *pCh != '\0'; ++pCh)
{
swap(*pBegin, *pCh);
permutation(pStr, pBegin + 1);
swap(*pBegin, *pCh);
}
}
}
int main()
{
char str[] = "abcd";
permutation(str, str);
}
- 這是在源字符串上的操作,因此,
swap
之後還需要再次swap
回來以恢復。
- 最終結果是分組的
- 以
a
開頭,後面跟三個字符
- 以
b
開頭,後面跟三個字符
- 以
c
開頭,後面跟三個字符
- 以
d
開頭,後面跟三個字符
先將一個字符a
和後面的一個字符交換後,只需要再對後三個字符遞歸調用當前函數即可。
- 遞歸的推出條件就是字符串爲空
*pBegin == '\0'
。