本文**:
問題1 :輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a、b、c所能排列出來的所有字串abc、acb、bac、bca、cab和cba。
思路:這是個遞迴求解的問題。遞迴演算法有四個特性:(1)必須有可達到的終止條件,否則程式將陷入死迴圈;(2)子問題在規模上比原問題小;(3)子問題可通過再次遞迴呼叫求解;(4)子問題的解應能組合成整個問題的解。
對於字串的排列問題。如果能生成n - 1個元素的全排列,就能生成n個元素的全排列。對於只有1個元素的集合,可以直接生成全排列。全排列的遞迴終止條件很明確,只有1個元素時。下面這個圖很清楚的給出了遞迴的過程。
參考**:解法1通過permutation_solution1(str, 0, n); 解法2通過呼叫permutation_solution2(str, str)來求解問題。
//函式功能 : 求乙個字串某個區間內字元的全排列
//函式引數 : pstr為字串,begin和end表示區間
//返回值 : 無
void permutation_solution1(char *pstr, int begin, int end)
}
問題3:打靶問題。乙個射擊運動員打靶,靶一共有10環,連開10 槍打中90環的可能性有多少?
思路:這道題的思路與字串的組合很像,用遞迴解決。一次射擊有11種可能,命中1環至10環,或脫靶。
參考**:
//函式功能 : 求解number次打中sum環的種數
//函式引數 : number為打靶次數,sum為需要命中的環數,result用來儲存中間結果,total記錄種數
//返回值 : 無
void shootproblem_solution1(int number, int sum, vector&result, int *total)
字串排列組合問題
一.全排列無重複字元 include include char buf 1024 void func int index void swap int index1,int index2 intmain void func int index else void swap int index1,int...
字串的排列組合問題
問題1 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a b c所能排列出來的所有字串abc acb bac bca cab和cba。思路 這是個遞迴求解的問題。遞迴演算法有四個特性 1 必須有可達到的終止條件,否則程式將陷入死迴圈 2 子問題在規模上比原問題小 3 子...
字串的排列組合問題
題目 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a b c所能排列出來的所有字串abc acb bac bca cab和cba。分析 這是一道很好的考查對遞迴理解的程式設計題,因此在過去一年中頻繁出現在各大公司的面試 筆試題中。我們以三個字元abc為例來分析一下求字...