比如 s = 『abc』,那字串 s 的全排列結果為「abc」,「abc」,「bac」,「bca」,「cba」,「cab」。
(1)**
def string_permutation(s):
# 迭代終止條件
if len(s) <= 1:
return [s]
else:
temp_list =
for i in range(len(s)): # 遍歷字串 s 中的每個字元
for j in string_permutation(s[0:i] + s[i+1:]): # 把除了s[i]字元以外的字元組成字串然後讓它迭代
return temp_list
(2)分析
如 s = 『abc』
過程1:
s = 『abc』
s的長度為3
i 可以取 0,1,2
當 i = 0時,string_permutation([『bc』])迭代,進入過程2(去看過程2)。
處理完過程2後返回到這裡:
此時 j 只能取 『bc』,『cb』,所以temp_list = [『abc』,『acb』]
當 i =1時,string_permutation([『ac』])迭代,這裡和 i = 0 的情況一模一樣,我害怕把大家搞混就不再贅述了。
過程2:
s = 『bc』
s的長度為2
i 可以取 0,1
當 i = 0時,string_permutation(『c』)迭代,進入過程3(去看過程3)。
處理完程序3後返回到這裡:
此時 j 只能取 『c』,所以temp_list = [s[0]+j] = [『bc』]。
過程3:
s = 『c』
s的長度為 1
滿足迭代終止條件,所以string_permutation(『c』)返回 [『c』]
過程4:
s = 『b』
s的長度為 1
滿足迭代終止條件,所以string_permutation(『b』)返回 [『b』]
字串全排列 非遞迴實現
乙個演算法命題 給定字串s 0 n 1 設計演算法,列舉s的全排列。如 123,全排列就是 123,132,213,231,312,321 由123的全排列 123,132,213,231,312,321可知,這個全排列大小是有序的。也就是說,從最小的開始排列,每次只找比當前排列大一點的序列即可,這...
字串去重複全排列演算法
輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a b c 所能排列出來的所有字串 abc acb bac bca cab 和 cba。分析 從集合中依次選出每乙個元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理,從而得到所有元素的全排列。以對字串ab...
字串的排列 全排列
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。使用itertools中的permutations,可以實現全排列 ...