/**
* 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则
* 输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
*/
#include <stdio.h>
static void swap(char array[], int i, int j)
{
char tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
static int contains(char array[], int m, int n)
{
for(int i = m; i < n; ++i)
{
if(array[i] == array[n])
return 1;
}
return 0;
}
void permutation(char array[], int index, int n)
{
if(index == n)
{
for(int i = 0; i < n; ++i)
{
printf("%c", array[i]);
}
printf(" ");
}
else
{
for(int i = index; i < n; ++i)
{
// 去重比如字符数组是{'a', 'a', 'b'}
if(contains(array, index, i))
continue ;
swap(array, index, i);
permutation(array, index + 1, n);
swap(array, index, i);
}
}
}
main()
{
char array[] = {'a', 'b', 'c'};
permutation(array, 0, 3);
}
运行结果: abc acb bac bca cba cab
字符串的排列
最新推荐文章于 2023-09-20 10:40:24 发布