字串全排列

2021-06-22 17:18:53 字數 614 閱讀 9338

題目:輸入乙個字串,列印出該字串中字元的所有排列。

例如輸入字串abc,則輸出由字元a、b、c所能排列出來的所有字串abc、acb、bac、bca、cab和cba。

設輸入字串s="x1x2x3...xn",它的全排列由以下兩種情況組成:

1)x1+"x2x3...xn"的全排列

2)x1和xi(i=2,3,....,n)交換之後,xi + "x2x3...xi-1x1xi+1...xn"的全排列

而"x2x3...xn"和"x2x3...xi-1x1xi+1...xn"的全排列也可以由同樣的方法求得,所以這是個遞迴。

實現的時候需要注意,每次交換x1和xi之後,在下一次交換之前,要把x1和xi換回去。

void myswap(char &a, char &b)

void myprint(char str, size_t n)

cout << endl;

}void permutation(char str, size_t begin, size_t end)

for(size_t i = begin; i < end; i++) }

void main()

遞迴 字串全排列 全排列

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

字串全排列

依次選出每乙個字元元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理,從而得到所有元素的全排列。以對字串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...