劍指offer 字串的全排列

2021-09-01 12:34:19 字數 4101 閱讀 3917

題目描述

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