輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a、b、c所能排列出來的所有字串abc、acb、bac、bca、cab和cba。
對於乙個字元來說,只有乙個排列就是其自身,那麼對於多個字元的組合來說,也是有規律可循的:可以在字串中選出乙個字元來固定出頭部,比如上述先用a來開頭,那麼後面的部分就由b、c來組成,之後再將b、c分別更換為頭部,後面的就由剩下的字元來組成,而如果字串中的字元比較多的時候,可以先從字串的尾部開始排列,首先排列最後兩個字元,交換後面兩個字元,然後增加到三個字元,更換頭部,排列剩下的部分,再依次增加到四個字元,更換頭部,排雷剩下的部分......因此,這種思路可以用遞迴來實現:
#include using namespace std;void printallarray(char* str, char *p_start){ if(str != null)//判斷引數有效性 { //當遍歷到字串結尾的時候就應當將字串列印出來 if(*p_start == '\0') { cout<
執行程式:
《完》本文出自 「敲完**好睡覺zzz」 部落格,請務必保留此出處
28 字串的排列
題目 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。解題思路 遞迴呼叫 遞迴演算法的四個特性 1.必須可以達到終止條件,否則會陷入死迴圈 2 子問題在規模上比原問題小 3 子問題可...
面試題28 字串排列
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。1 class solution 1...
面試題28 字串的排列
1.輸入乙個字串,列印出該字串中字元的所有排列,例如輸入字串abc,則列印出字元a,b,c的所有可能排列,abc,acb,bac,bca,cab,cba.分析 我們可以講字串看成兩部分組成,第一部分為第乙個字元,第二部分是後面所有的字元。首先求所有可能出現在第一位置的字元,即把第乙個字元和後面所有的...