题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
解读:
这道题用递归最方便,里面用到了冒泡排序中思想,如abcd,a的位置冒泡移动变成bacd、cbad、dbca,而对于第一种中除a之外的bcd同样进行相同的操作,对b进行冒泡移动,cbd,dcb,而对于bcd中除b之外的cd进行冒泡还有dc,总结一点就是冒泡加递归
结果是:
abcd
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc
代码:
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
void swap(char* c1, char* c2){
char tmp = *c1;
*c1 = *c2;
*c2 = tmp;
}
void permutation(char* pstr, char* pbegin)
{
if (*pbegin == '\0')
printf("%s\n", pstr);
else
{
for (char* pCh = pbegin; *pCh != '\0'; pCh++)
{
swap(pbegin, pCh);
permutation(pstr, pbegin + 1);
swap(pbegin, pCh);
}
}
}
void permutationStr(char* pstr){
if (pstr == NULL)
return;
permutation(pstr, pstr);
}
int main()
{
char str[6] = "abcd";
permutationStr(str);
return 0;
}