欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python字符串的全排列算法實(shí)例詳解

 更新時(shí)間:2019年01月07日 14:27:05   作者:hustfc  
這篇文章主要介紹了Python字符串的全排列算法,結(jié)合實(shí)例形式較為詳細(xì)的總結(jié)分析了Python字符串全排列的常見(jiàn)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python字符串的全排列算法。分享給大家供大家參考,具體如下:

題目描述

輸入一個(gè)字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串a(chǎn)bc,則打印出由字符a,b,c所能排列出來(lái)的所有字符串a(chǎn)bc,acb,bac,bca,cab和cba。

輸入描述

輸入一個(gè)字符串,長(zhǎng)度不超過(guò)9(可能有字符重復(fù)),字符只包括大小寫字母。

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

swap函數(shù)將新的元素與之前的所有元素交換,返回一個(gè)列表,每一次交換都插入一個(gè)元素,因此是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[:] #注意這個(gè)地方
 listElem[0], listElem[i] = listElem[i], listElem[0]
 if listElem != preList: #處理重復(fù)情況
 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[:] # 注意這個(gè)地方
 listElem[0], listElem[i] = listElem[i], listElem[0]
 if listElem != preList: # 處理重復(fù)情況
  #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']

遞歸調(diào)用函數(shù)

這個(gè)地方要用+號(hào),因?yàn)槭羌由厦看握{(diào)用的結(jié)果list(有多個(gè)元素),而不能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) #這里返回的是一個(gè)數(shù)組,數(shù)組加數(shù)組使用+,數(shù)組加元素使用append符號(hào)
 return result

按照字典排序

這里我按照冒泡字典排序,實(shí)際上沒(méi)有必要,比較字符大小直接可以用sorted函數(shù)。

sorted函數(shù)又方便又高效

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[:] #注意這個(gè)地方
  listElem[0], listElem[i] = listElem[i], listElem[0]
  if listElem != preList: #處理重復(fù)情況
  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) #這里返回的是一個(gè)數(shù)組,數(shù)組加數(shù)組使用+,數(shù)組加元素使用append符號(hào)
 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'))

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Python實(shí)現(xiàn)批量修改圖片大小

    Python實(shí)現(xiàn)批量修改圖片大小

    在日常生活中經(jīng)常有需要調(diào)整圖片大小的需求,一張兩張的還好,但是如果需要幾十張幾百?gòu)埳踔翈浊?,就可以考慮使用Python腳本來(lái)執(zhí)行了,下面小編就來(lái)和大家分享幾個(gè)Python可以批量修改圖片大小的腳本吧
    2023-07-07
  • Python webdriver.Chrome()的使用解讀

    Python webdriver.Chrome()的使用解讀

    這篇文章主要介紹了Python webdriver.Chrome()的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python基礎(chǔ)編程小實(shí)例之計(jì)算圓的面積

    python基礎(chǔ)編程小實(shí)例之計(jì)算圓的面積

    Python是最常用的編程語(yǔ)言,這種語(yǔ)言就是一種可以快速開(kāi)發(fā)應(yīng)用的解釋型語(yǔ)言,有些用戶不知道該怎么在Python編程里計(jì)算圓的面積,現(xiàn)在就給大家具體解釋一下,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)編程小實(shí)例之計(jì)算圓的面積的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • python實(shí)現(xiàn)數(shù)組平移K位問(wèn)題

    python實(shí)現(xiàn)數(shù)組平移K位問(wèn)題

    這篇文章主要介紹了python實(shí)現(xiàn)數(shù)組平移K位問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • PyTorch計(jì)算損失函數(shù)對(duì)模型參數(shù)的Hessian矩陣示例

    PyTorch計(jì)算損失函數(shù)對(duì)模型參數(shù)的Hessian矩陣示例

    這篇文章主要為大家介紹了PyTorch計(jì)算損失函數(shù)對(duì)模型參數(shù)的Hessian矩陣的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • python 根據(jù)網(wǎng)易云歌曲的ID 直接下載歌曲的實(shí)例

    python 根據(jù)網(wǎng)易云歌曲的ID 直接下載歌曲的實(shí)例

    今天小編就為大家分享一篇python 根據(jù)網(wǎng)易云歌曲的ID 直接下載歌曲的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • PyCharm無(wú)代碼提示解決方案

    PyCharm無(wú)代碼提示解決方案

    最近發(fā)現(xiàn)在使用pycharm編寫python代碼的時(shí)候發(fā)現(xiàn)沒(méi)有了代碼提示的功能,下面這篇文章主要給大家介紹了關(guān)于PyCharm無(wú)代碼提示解決方案的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • python 中值濾波,椒鹽去噪,圖片增強(qiáng)實(shí)例

    python 中值濾波,椒鹽去噪,圖片增強(qiáng)實(shí)例

    今天小編就為大家分享一篇python 中值濾波,椒鹽去噪,圖片增強(qiáng)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python基于?Web?實(shí)現(xiàn)?m3u8?視頻播放的實(shí)例

    python基于?Web?實(shí)現(xiàn)?m3u8?視頻播放的實(shí)例

    這篇文章主要介紹了python基于?Web?實(shí)現(xiàn)?m3u8?視頻播放的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Pygame實(shí)戰(zhàn)練習(xí)之一百層游戲

    Pygame實(shí)戰(zhàn)練習(xí)之一百層游戲

    跳上一百層想必是很多人童年時(shí)期的經(jīng)典游戲,我們依舊能記得抱個(gè)老人機(jī)娛樂(lè)的場(chǎng)景,下面這篇文章主要給大家介紹了關(guān)于如何利用python寫一個(gè)簡(jiǎn)單的跳上一百層小游戲的相關(guān)資料,需要的朋友可以參考下
    2021-09-09

最新評(píng)論