题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
方法一:不能避免重复
#include <iostream>
using namespace std;
void swap(char* x,char* y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}
void permutation(char* pStr, char* 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);
}
}
}
void permutation(char* pStr)
{
if(pStr == NULL)
return;
permutation(pStr, pStr);
}
int main()
{
char str[] = "abc";
permutation(str, str);
return 0;
return 0;
}
#include <iostream>
using namespace std;
void swap(char* x,char* y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}
void permutation(char* pStr, int begin, int length)
{
int j;
if(begin == length)
cout<<pStr<<endl;
else
{
for(j = begin; j<=length; j++)
{
if(pStr[begin] == pStr[j] && j != begin) // 避免重复,当不同位置的字符相同时不再交换
continue;
swap(pStr+begin, pStr+j);
permutation(pStr, begin+1, length);
swap(pStr+begin, pStr+j);
}
}
}
int main()
{
char pStr[] = "aba";
permutation(pStr, 0, 2);
return 0;
}