題目描述
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
輸入描述
輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
注意有可能重複,因此需要判斷
def
swap
(self, newelem, elem)
: result =
listelem =
list
(elem)
listelem.insert(
0, newelem)
''.join(listelem)
)for i in
range(1
,len
(listelem)):
prelist = listelem[:]
#注意這個地方
listelem[0]
, listelem[i]
= listelem[i]
, listelem[0]
if listelem != prelist:
#處理重複情況
''.join(listelem)
) listelem[0]
, listelem[i]
= listelem[i]
, listelem[0]
return result
如果使用+方法:
def
swap
(newelem, elem)
: result =
listelem =
list
(elem)
listelem.insert(
0, newelem)
result +=
''.join(listelem)
for i in
range(1
,len
(listelem)):
prelist = listelem[:]
# 注意這個地方
listelem[0]
, listelem[i]
= listelem[i]
, listelem[0]
if listelem != prelist:
# 處理重複情況
result +=
''.join(listelem)
listelem[0]
, listelem[i]
= listelem[i]
, listelem[0]
return result
print
(swap(
'1',
'234'))
>>
>>
['1'
,'2'
,'3'
,'4'
,'2'
,'1'
,'3'
,'4'
,'3'
,'2'
,'1'
,'4'
,'4'
,'2'
,'3'
,'1'
]
def
recurtionpermutation
(self, ss, index)
: result =
if index ==0:
0])else
: previouslist = self.recurtionpermutation(ss, index -1)
newelem = ss[index]
#print(previouslist)
for elem in previouslist:
result += self.swap(newelem, elem)
return result
按照字典排序
這裡我按照冒泡字典排序,實際上沒有必要,比較字元大小直接可以用sorted函式。
sorted函式又方便又高效
def
bubblesortbydic
(self, result)
:for i in
range
(len
(result)):
for j in
range
(len
(result)-1
, i,-1
):if result[j]
< result[i]
: result[i]
, result[j]
= result[j]
, result[i]
return result
ac**:
class
solution
:def
swap
(self, newelem, elem)
: result =
listelem =
list
(elem)
listelem.insert(
0, newelem)
''.join(listelem)
)for i in
range(1
,len
(listelem)):
prelist = listelem[:]
#注意這個地方
listelem[0]
, listelem[i]
= listelem[i]
, listelem[0]
if listelem != prelist:
#處理重複情況
''.join(listelem)
) listelem[0]
, listelem[i]
= listelem[i]
, listelem[0]
return result
defrecurtionpermutation
(self, ss, index)
: result =
if index ==0:
0])else
: previouslist = self.recurtionpermutation(ss, index -1)
newelem = ss[index]
#print(previouslist)
for elem in previouslist:
result += self.swap(newelem, elem)
return result
# def bubblesortbydic(self, result):
# for i in range(len(result)):
# for j in range(len(result) - 1, i, -1):
# if result[j] < result[i]:
# result[i], result[j] = result[j], result[i]
# return result
defpermutation
(self, ss)
:# write code here
if ss =='':
return
#return self.bubblesortbydic(self.recurtionpermutation(ss, len(ss) - 1))
return
sorted
(self.recurtionpermutation(ss,
len(ss)-1
))print
(solution(
).permutation(
'acdfb'
))
劍指offer 字串全排列
題目 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。思路 元素排列是遞迴問題,在某個位置上選擇哪個元素就對應著該位置上的元素與其他元素相交換 不要忘了與自己交換的情況 所以按照排列...
劍指Offer之字串全排列
題目 輸入乙個字串,列印出該字串中字元的所有排列。你可以以任意順序返回這個字串陣列,但裡面不能有重複元素 輸入 s abc 輸出 abc acb bac bca cab cba class solution for int j i j變形二 列印字串的所有子串行 public class demo2...
列舉字串的全排列(劍指offer)
1 題目 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a b c所能排列出來的所有字串abc acb bac bca cab cba。2 解題分析 把複雜的問題分解成小問題。把乙個字串看成由兩部分組成 第一部分為它的第乙個字元,第二部分是後面的所有字元。如圖1所示。...