【刷题剑指offer】字符串的排列

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

思路:递归实现。分为两步:1、首先求出所有可能出现在第一个位置的字符,即把第一个字符和后面所有字符交换。

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

那么后面的字符也可以分为两部分,第一个字符和后面的所有字符,我们重复1、2步骤,所以这是一个递归过程

void Permutation(char*pStr)
{
	if (pStr == NULL)
		return;
	Permutation(pStr, pStr);
}
void Permutation(char*pStr, char*pBegin)
{
	if (pBegin == '\0')
		return pStr;
	else
	{
		for (char pCh = pBegin; pCh != '\0'; pCh++)
		{
			char temp = *pCh;
			*pCh = *pBegin;
			*pBegin = *temp;
			
			Permutation(pStr, pBegin + 1);

			temp = *pCh;
			*pCh = *pBegin;
			*pBegin = *temp;
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章