劍指offer8 字串的排列

2021-08-21 14:34:02 字數 1398 閱讀 7082

問題描述:

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

輸入描述:

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

解題思路:

回溯法

# -*- coding:utf-8 -*-

class solution:

def permutation(self, ss):

# write code here

slist = list(ss)

plist = self.permute(slist, 0)

plist = list(set(plist))

plist.sort()

return plist

def permute(self, ss, pbegin):

p =

if pbegin == len(ss) - 1:

return [ss[pbegin]]

for i in range(pbegin, len(ss)):

ss[pbegin], ss[i] = ss[i], ss[pbegin]

tmp = [ss[pbegin] + c for c in self.permute(ss, pbegin+1)]

p.extend(tmp)

ss[pbegin], ss[i] = ss[i], ss[pbegin]

return p

或者對下標進行去全排:

# -*- coding:utf-8 -*-

class solution:

def permutation(self, ss):

# write code here

sslist = list(ss)

permutelist =

if sslist == :

return permutelist

self.getpermute(sslist, permutelist, )

permutelist = list(set(permutelist))

permutelist.sort()

return permutelist

def getpermute(self, slist, plist, per):

if len(slist) == len(per):

return

for ind in range(len(slist)):

if ind not in per:

self.getpermute(slist,plist,per)

per.remove(ind)

劍指offer(24) 字串的排列

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

劍指Offer 38 字串的排列

輸入乙個字串,列印出該字串中字元的所有排列。例 輸入 abc 輸出 abc acb bac cab cba 長度為n的字串的排列若是集合s,其中一種排列的字串為 s2,sn s2 sn 再插入sn 1s sn 1 則有對於乙個字串有n 1個插入位置。因此,解題思路就是每次遞迴加入乙個字元,直到字串全...

劍指offer 27 字串的排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。時間限制 1秒 空間限制 32768k 熱度指數 2992...