【題 目】輸入乙個字串,列印該字串的所有排列。例如輸入字串abc,輸出其全排列為abc,acb,bac,bca,cab,cba。
【思 路】我們想一下,如果不程式設計,手工做的話,我們的基本考慮是:每次首先固定乙個字母,然後讓其餘的字母全排列;然後換乙個字母固定,再全排列其餘的字母,如此迴圈而已。換句話說:假設長度為n的字串排列方式是f(n),那麼我們的基本思路是:每次讓n個字母中的乙個字母「打頭陣」,其餘的n-1個字母則按f(n-1)的方式排列。這樣我們就明白這明顯是遞迴思路。
遞迴最重要的問題是:結束的條件是什麼?或者說,最小子問題是什麼?還是以上面的abc例子來說明,首先固定a,然後排列bc;排列bc成為乙個子問題,同樣固定b,排列c;排列c成為子問題,固定c,剩下乙個字串結束符('\0');碰到結束符,前面的字元已經都排好了,所以我們只需要列印前面所有已經固定的字元就可以了。
根據這種思路,我們容易得到如下的**:
1 #include執行結果如下:2 #include
3using
namespace std;45
void stringpermutation(char *str,char *perbegin)
6 15
else
16
33 }
34 }
3536
void stringpermutation(char *string)
37 40
41int main()
42
【思路2】當然如果我們知道c++的庫函式next_permutation,那麼就不用這麼麻煩了,因為庫函式的演算法都是封裝的,所以沒什麼好說的,直接上**:
1 #include執行結果如下:2 #include
3using
namespace std;45
void stringpermutation(char *str,char *perbegin)
6 15
else
16
33 }
34 }
3536
void stringpermutation(char *string)
37 40
41int main()
42
何海濤部落格:
標準庫全排列:注:1
)本部落格所有的**環境編譯均為
win7+vc6
。所有**均經過博主上機除錯。
2)博主
python27
Blog1 字串全排列演算法
給出乙個字串 可能包含字母和數字 給出該字串中字元的所有非重複排列 例子輸入 abc 輸出 abc,acb,bac,bca,cab,cba 1.典型的遞迴方法 例項分析 下面對上述例子字串 abc 進行分析,此時字串長度為3,首字元為 a 第一層遞迴 1 a 與第乙個字元交換,即與本身交換,字串不變...
字串全排列演算法
輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba 這是典型的遞迴求解問題,遞迴演算法有四個特性 對於字串的排列問題 如果能生成n 1個元素的全排列,就能生成n個元素的全排列。對於只有乙個元素的集...
演算法 字串全排列演算法
最近在牛客和領扣上刷題,碰到了一些全排列的問題,總結一下。我們首先來看乙個問題?題目 字串的排列 題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。解題思路 使用遞迴的方式來...