字串的全排列

2021-09-24 16:35:54 字數 1197 閱讀 5458

題目描述

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。

輸入描述:

輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。

分析:

看過答案,部落格,用遞迴解決,總感覺有點問題:遞迴解法每次處理乙個子串,怎麼將子串拼接成完整的字串?(寫這幾個字時,靈光一閃:每次處理的都是完整的字串,不用拆開的,用下標標註每次需要處理的子串的開始位置,到遞迴的出口處,還是原來長度的字串)

res =

defswap

(s, i, j)

:if i == j:

return s

else

:return

''.join(

(s[:i]

, s[j]

, s[i+

1:j]

, s[i]

, s[j+1:

]))def

permute

(s, start)

:#1個字元不處理

iflen

(s)<2:

return

#遞迴出口,子字串長度為2,則該字串是結果,交換這個字串之後,又是乙個結果,儲存之if(

len(s[start:])

==2):

snew = swap(s, start, start+1)

return

#字串長度大於等於3,則依次將子串的第乙個字元和自己以及後續字元交換,得到新的字串

#繼續遞迴處理

for i in

range

(start,

len(s)):

snew = swap(s, start, i)

permute(snew, start+1)

a ='abc'

permute(a,0)

print

(res)

#['abc', 'acb', 'bac', 'bca', 'cba', 'cab']

對於沒有重複字元,上面的**ok的,但是牛客上的測試案例是包含有重複數字的,為此,做如下修改:

字串的排列 全排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串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放到第一位置,...