`
yyang900427
  • 浏览: 11215 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

字符串的排列

阅读更多

/**
 * 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串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 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics