剑指offer(二):字符串的全排列 字符串 C语言

题目:实现字符串的全排列

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

思路:  

1.先求出所有可以出现在第一个位置的字符

2.固定第一个字符,求后面所有字符的排列。

  这个时候我们仍把后面的所有字符分为两部分:后面的字符的第一个字符,以及这个字符之后的所有字符。然后把第一个字符逐一和它后面的字符交换。

递归算法:

#include
#include
using namespace std;
 
void Permutation(char* pStr, char* pBegin)
{
	assert(pStr && pBegin);
 
	if(*pBegin == '\0')
		printf("%s\n",pStr);
	else
	{
		for(char* pCh = pBegin; *pCh != '\0'; pCh++)
		{
			swap(*pBegin,*pCh);
			Permutation(pStr, pBegin+1);
			swap(*pBegin,*pCh);
		}
	}
}
 
int main(void)
{
	char str[] = "abc";
	Permutation(str,str);
	getchar();
	return 0;
}

 

你可能感兴趣的:(剑指offer)