劍指Offer—字串排列
阿新 • • 發佈:2019-02-17
題目描述:輸入一個字串,打印出該字串中字元的所有排列。
解析:step 1:求所有可能出現第一個位置的字元。把第一個字元與後面的每個字元交換。
step 2:固定第一個字元,將後面的字元利用遞迴進行全排列。
#include <iostream> #include <stdio.h> using namespace std; void StringPermutation(char *pStr,char *pBegin); //字串排列 void Permutation(char *pStr) { if(pStr==NULL) return; StringPermutation(pStr,pStr); } void StringPermutation(char *pStr,char *pBegin) { if(*pBegin=='\0') printf("%s\n",pStr); else { for(char* pCh=pBegin;*pCh!='\0';++pCh) { //將第一個字元與後面的字元依次置換 char tem=*pCh; *pCh=*pBegin; *pBegin=tem; //遞迴遍歷後面的字元 StringPermutation(pStr,pBegin+1); //遞迴完成後,將調換的字元還原。 tem=*pBegin; *pBegin=*pCh; *pCh=tem; } } } //測試程式碼 void Test(char *pStr) { if(pStr==NULL) printf("Test for NULL begins:\n"); else printf("Test for %s begins:\n",pStr); Permutation(pStr); printf("\n"); } int main() { //cout << "Hello world!" << endl; char s1[]=" "; Test(s1); char s2[]="a"; Test(s2); char s3[]="abc"; Test(s3); return 0; }