字串的全排列

2021-07-10 08:40:53 字數 1149 閱讀 5901

已知字串中的字元是互不相同的,現在把他們任意排列(例如,若已知字串是「ab」,則任意輸出排列是「ab」「aa」「ba」「bb」),程式設計輸出全部的所有組合。

不同於輸出全排列,只需要在函式中設定首位和後面各位的迴圈遞迴即可。同以上思路要從「ab」中延伸出「aa」「bb」可通過將首位賦值給後面各位迴圈遞迴完成(需要一定的限制條件)。

/*

字串的全排列

已知字串的字元是互不相同的,現在把他們的任意排序(例如,若已知字串「ab」,則任意排序為

「aa」「ab」「ba」「bb」)

*/#include

using

namespace

std;

void arbitrarilychar(char *s, char * copy,int nfrom, int nend, int nt);

void

strncpy(char * dest, char * src, int nstart, int nend);

int main()

void arbitrarilychar(char *s,char * copy,int nfrom,int nend,int nt)

else

if (nfrom==nend)

cout

<

}else

swap(s[i], s[nfrom]);

arbitrarilychar(s,copy,nfrom + 1, nend, nt-1);

for (int j = 1; j< num; j++)

//將首位迴圈賦值給後面各位完成衍生}}

}}void

strncpy(char * dest, char * src, int nstart, int nend)

}

執行結果

由於輸入為「abc」的任意排列共有3的3次方共27個,而對其遞迴以a開頭為例共會輸出12個值,在賦值後的遞迴交換中可能會產生重複輸出的現象,n(≧▽≦)n初學者解決不了,大家指點一下。

字串的排列 全排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。使用itertools中的permutations,可以實現全排列 ...

遞迴 字串全排列 全排列

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

字串全排列

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