1. 程式人生 > >劍指offer(二):字串的全排列 字串 C語言

劍指offer(二):字串的全排列 字串 C語言

題目:實現字串的全排列

輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。

思路:  

1.先求出所有可以出現在第一個位置的字元

2.固定第一個字元,求後面所有字元的排列。

  這個時候我們仍把後面的所有字元分為兩部分:後面的字元的第一個字元,以及這個字元之後的所有字元。然後把第一個字元逐一和它後面的字元交換。

遞迴演算法:

#include<iostream>
#include<assert.h>
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;
}