中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Python怎么實現一個字符串的全排列算法

發布時間:2021-05-13 17:25:28 來源:億速云 閱讀:199 作者:Leah 欄目:開發技術

使用Python怎么實現一個字符串的全排列算法?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

題目描述

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

輸入描述

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

注意有可能重復,因此需要判斷
注意list的append方法和list的+方法的區別
append方法在list后面添加元素
+方法在list后面添加list
如果使用append(list),那么list中所有的元素都會作為一項插入

swap函數將新的元素與之前的所有元素交換,返回一個列表,每一次交換都插入一個元素,因此是append方法

def swap(self, newElem, Elem):
 result = []
 listElem = list(Elem)
 listElem.insert(0, newElem)
 result.append(''.join(listElem))
 for i in range(1, len(listElem)):
 preList = listElem[:] #注意這個地方
 listElem[0], listElem[i] = listElem[i], listElem[0]
 if listElem != preList: #處理重復情況
 result.append(''.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.append(''.join(listElem))
 result += ''.join(listElem)
 for i in range(1, len(listElem)):
 preList = listElem[:] # 注意這個地方
 listElem[0], listElem[i] = listElem[i], listElem[0]
 if listElem != preList: # 處理重復情況
  #result.append(''.join(listElem))
  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']

遞歸調用函數

這個地方要用+號,因為是加上每次調用的結果list(有多個元素),而不能append

def recurtionPermutation(self, ss, index):
 result = []
 if index == 0:
 result.append(ss[0])
 else:
 previousList = self.recurtionPermutation(ss, index - 1)
 newElem = ss[index]
 #print(previousList)
 for Elem in previousList:
 result += self.swap(newElem, Elem) #這里返回的是一個數組,數組加數組使用+,數組加元素使用append符號
 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)
 result.append(''.join(listElem))
 for i in range(1, len(listElem)):
  preList = listElem[:] #注意這個地方
  listElem[0], listElem[i] = listElem[i], listElem[0]
  if listElem != preList: #處理重復情況
  result.append(''.join(listElem))
  listElem[0], listElem[i] = listElem[i], listElem[0]
 return result
 def recurtionPermutation(self, ss, index):
 result = []
 if index == 0:
  result.append(ss[0])
 else:
  previousList = self.recurtionPermutation(ss, index - 1)
  newElem = ss[index]
  #print(previousList)
  for Elem in previousList:
  result += self.swap(newElem, Elem) #這里返回的是一個數組,數組加數組使用+,數組加元素使用append符號
 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
 def Permutation(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'))

python有哪些常用庫

python常用的庫:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彰武县| 纳雍县| 常山县| 洱源县| 济宁市| 南和县| 阜新市| 武安市| 屏边| 二手房| 台中县| 林周县| 老河口市| 阳高县| 佛冈县| 常山县| 威远县| 治县。| 石河子市| 霍山县| 裕民县| 桃江县| 翁牛特旗| 谢通门县| 弋阳县| 麻栗坡县| 呼图壁县| 马鞍山市| 雅江县| 秀山| 海门市| 文昌市| 拜城县| 方正县| 泰兴市| 彭州市| 利津县| 怀安县| 东光县| 屏东市| 汉中市|