最近笔试时遇到一道全排列的题,当时想到使用递归实现,但是由于时间问题最后还是没做出来,故趁有时间把其实现之。
代码如下:
<span style="color:#666666;">#include <iostream>
using namespace std;
void swap(char *a,char *b)
{
char term;
term = *a;
*a = *b;
*b = term;
}
bool Isswap(char * str,int m,int n)
{
for (;m<n;m++)
{
if (str[m] == str[n])
{
return false;
}
}
return true;
}
void AllRange(char *str,int m,int len)
{
if (m==len-1)
{
cout<<str<<endl;
}
else
{
for (int i = m;i<len;i++)
{
if (Isswap(str,m,i))
{
swap(&str[i],&str[m]);
AllRange(str,m+1,len);
swap(&str[i],&str[m]);
}
}
}
}
void Permutation(char *str)
{
if (str == NULL)
{
return ;
}
AllRange(str,0,strlen(str));
}
void main(int argc, char **argv)
{
char str[] = "abb";
Permutation(str);
}</span>