題目:
輸入乙個字串,列印出該字串中字元的所有排列。
例如輸入字串abc,則輸出由字元a、b、c 所能排列出來的所有字串
abc、acb、bac、bca、cab 和 cba。
思路一:遞迴求解
#include #include #include /*說明:採用遞迴求解
如求"abc",則先固定a,交換bc
求b,則交換ac,時間複雜度o(n^2)
優化了含有重複字串的問題
*/#define swap(x, y)\
/*檢查從begin到end中是否包含end字串*/
bool isreapet(char* s, int begin, int end)
}bool next_permutation(char *s, int n)
}/*如果都已經排序完成,則結束整個查詢*/
if (i < 0)
/*找到第乙個比公升序更大的數值*/
for (j=n-1; j>i; j--)
}// printf("begin %d, end %d\n", begin, end);
reverse(s, begin, end);
return true;
}/*快速排序一次後得到的索引值*/
int partition(char* s, int low, int high)
s[low] = s[high];
while (low
字串的排列 全排列
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串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放到第一位置,...