劍指offer(二):字串的全排列 字串 C語言
阿新 • • 發佈:2018-11-28
題目:實現字串的全排列
輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串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; }