
问题:给定一个字符串,实现他的全排列,如”abc"全排列为abc,acb,bac,bca,cab,cba.
细究,就可以将其理解为一中递归思想。
f(abc)=a+f(bc),f(bc)=b+f©,f©=c;
下文给出两种解决放大。一个用相对比较古老的两数交换的C语言方法,一个用到STL两种算法。
如下代码
void swap(char* a, char* b)
{
char temp = *a;
*a = *b;
*b = temp;
}
void Permutation(char* pStr, char* pPostion)
{
// 基准点
if (*pPostion == '')
{
cout << pStr << endl;
}
else
{
for (char* pChar = pPostion; *pChar != ''; pChar++)
{
// 依次和后面的字符交换
swap(*pChar, *pPostion);
Permutation(pStr, pPostion + 1);
// 换回来
swap(*pChar, *pPostion);
}
}
}
int main()
{
char test[] = "132";
Permutation(test, test);
cout << endl;
// 用STL输出全排列
// 注意:必须要保证数组顺序,
do
{
cout << test[0] << test[1] << test[2] << endl;
} while (next_permutation(test, test + 3));
cout << endl;
char test2[] = "321";
// 注意:必须要保证数组顺序,
do
{
cout << test2[0] << test2[1] << test2[2] << endl;
} while (prev_permutation(test2, test2 + 3));
return 0;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)