字串全排列

2021-06-22 08:45:09 字數 1182 閱讀 4396

前些天寫過一篇關於書中bug的文章,但是顯然對不起題目中的一二兩字,所以在此補充一下。當時確實打算寫兩例的,但是後來發現時我自己錯了,所以呢,還要告誡自己,要反覆論證哈~

今天這個問題源自何海濤老師的《劍指offer》,其中有乙個問題是列印出輸入字串的全排列的,這個問題在王曉東老師的《演算法設計與分析》中第一章也有講,就是用遞迴地方法,不斷地將當前串的首字元與其他字元進行交換,我們看下**吧

void permutation(char* pstr)

void permutation(char* pstr, char* pbegin)

else}}

當你輸入不含重複字元的字串時,不會有任何問題的,但是之前自己看了今年阿里的筆試題,有一題是這樣子說的,問「alibaba」的字元全排列共有多少種,哈,答案應該是多少,我就不說了吧,重點是上面的**遇到這種輸入時輸出的結果是a(n,n)個,這樣子應該是不可以的吧

我們可以給每層遞迴函式設定乙個string或char型陣列來記錄已經在當前串首位置出現的字元,如果*pch已經出現過一次,pch+1就好了,因為c++的string用起來比較方便,所以用string好了

#include#include#includeusing namespace std;

void permutation(char* pstr, char* pbegin,int& count);

void permutation(char* pstr, int& count)

void permutation(char* pstr, char* pbegin,int &count)

else

}}int main()

return 0;

}

這個方法雖然不怎麼高明,不過目前只想到這兒了

另外,我又加了乙個int& count引數記錄排列的個數,這樣子驗證一下我們的「alibaba」對不對

alibaba太多了,我們看看最後的結果吧

遞迴 字串全排列 全排列

在高中階段我們已經通過大量的習題了解了排列和組合。但是有時候我們研究的不是由排列和組合算出來的數字,研究的是生成排列和組合。即,把集合中元素所有的排列和組合全部列出來,然後研究這些序列的性質。今天我用兩種方法講一下如何生成排列。注意我們這裡涉及的順序都是序列的字典序。序列的字典序 設有兩個序列,第乙...

字串全排列

依次選出每乙個字元元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理,從而得到所有元素的全排列。以對字串abc進行全排列為例,我們可以這麼做 固定a,求後面bc的排列 abc,acb,求好後,a和b交換,得到bac 固定b,求後面ac的排列 bac,bca,求好後,c放到第一位置,...

字串全排列

如果沒有重複字元 include using namespace std void swap char char void permutation char char int main void swap char a,char b str 整個串 pbegin 後面的字串拉到前面的起始位置 voi...