【刷題劍指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;
		}
	}
}


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