劍指offer 字串的排列

2021-09-13 03:58:07 字數 1460 閱讀 2582

題目描述

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

輸入描述:

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

簡單的思路,依次取出字串裡面的字母,如『abc』則先取出a,然後用b對前一次迴圈的所有字串的空缺處進行插入,比如b插入『a』的前後變成了『ab』和『ba』,然後下次迴圈取出c,對上依次所有的字串繼續插值得到』cab』,『acb』,『abc』,『cba』,『bca』,『bac』,同時注意如果要插入的位置的後面如果跟當前字串相同,則跳過這個插入位置。

class

solution

: def permutation

(self, ss)

: # write code here

if ss =='':

return

res=

[ss[0]

] print res

part=

for i in

range(1

,len

(ss)):

for n in res:

for k in

range

(len

(res[0]

)):if ss[i]

!=n[k]

:#判斷是否重複

part.

(n[:k]

+ss[i]

+n[k:])

part.

(n+ss[i]

)#最後再加入最後乙個空缺位置

res=part

part=

return

sorted

(res)

另一種方法則是遞迴,每次取出任意乙個字元,對剩下的字串全排列即可,排除重複也是用相同的方法。

class

solution

: def permutation

(self, ss)

: # write code here

res =

iflen

(ss)

<2:

return ss.

split()

for i in

range

(len

(ss)):

for n in

map(lambda x: x+ ss[i]

, self.

permutation

(ss[

:i]+ss[i+1:

])):

if n not in res:

res.

(n)return

sorted

(res)

劍指Offer 字串排列

題目描述 輸入乙個字串,列印出該字串中字元的所有排列。解析 step 1 求所有可能出現第乙個位置的字元。把第乙個字元與後面的每個字元交換。step 2 固定第乙個字元,將後面的字元利用遞迴進行全排列。include include using namespace std void stringpe...

劍指offer 字串的排列

題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c 所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。解題思路 深度搜尋,在每層搜尋裡設定乙個a陣列對映所有字元,每個字元在這層迴圈中只能使用一次,避免重...

劍指offer 字串的排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。分析 經典問題。記住吧。class ...