#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‘
。
时间: 2024-10-03 14:31:55