題目:輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則列印出字元a、b、c所能排列出來的所有字串abc、acb、bac、bca、cab、cba。這是乙個典型的遞迴問題,考慮如何將複雜問題分解成簡單問題,最後通過遞迴解決。我們肯定有這樣的經驗,自己在寫abc的全排列的時候,肯定會想首先確定第乙個字元,然後考慮後面有什麼排列,比如確定第乙個字元為a,那麼剩下的b和c有兩種排列,分別是bc和cb,那麼以a開頭的字串有abc,acb這兩種排列。這就是我們下面程式所需要用到的解題思路。
將字串排列分解為字串的第乙個字元以及其後的剩餘字元。剩餘字串又可以按照前面的思路來解決,分解為第乙個字元和剩餘字串。當最後只有乙個字元的時候,程式就到達出口,這個時候輸出字串,就是其中的乙個排列。
字串abc,那麼可能出現在第乙個字元的可能性有三種,我們只需要每次互動第乙個字元,然後計算剩餘字串的排列即可。採用遞迴思路解決問題。
**例項:
view code
#include#includeusing
namespace
std;
//交換元素值
void swap(char &a,char &b)
//全排列函式
void permutation(char
string,int start,int
end)
else
}}void
main()
面試題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.分析 我們可以講字串看成兩部分組成,第一部分為第乙個字元,第二部分是後面所有的字元。首先求所有可能出現在第一位置的字元,即把第乙個字元和後面所有的...
面試題28 字串的排列
題目 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a b c所能排列出來 的所有字串abc acb bac bca cab和cba。本題擴充套件 如果不是求字元的所有排列,而是求字元的所有組合,應該怎麼辦?還是輸入三個字元a b c,則它們的組合有a b c ab ...