演算法15 字串的全排列

2022-07-05 18:12:11 字數 1448 閱讀 9008

【題 目】輸入乙個字串,列印該字串的所有排列。例如輸入字串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。解題思路 使用遞迴的方式來...