問題描述:
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串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...