非重複字串的全排列 python實現

2021-09-24 22:16:50 字數 1125 閱讀 4834

比如 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,可以實現全排列 ...