可以分为两种方式,递归和循环
oid swap(char* a, char*b)
{
char temp = *b;
*b = *a;
*a = temp;
}
void permute(char* source, int length, int cnt)
{
if(length == cnt)
{
printf("%s ", source);
return;
}
for(int i = cnt; i<length; ++i )
{
if(source[cnt] == source[i] && i != cnt)
{
continue;
}
swap(&source[cnt], &source[i]);
permute(source, length, cnt + 1);
swap(&source[i], &source[cnt]);
}
}
循环的方法
void swap(char* a, char*b)
{
char temp = *b;
*b = *a;
*a = temp;
}
void permuteA(char* source, int length)
{
for(int i = 0; i < length - 1; ++i)
{
for(int j = i ;j< length;++j)
{
swap(&source[i], &source[j]);
printf("%s ", source);
swap(&source[j], &source[i]);
}
}
}