国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python字符串的全排列算法實例詳解

2020-02-16 00:31:52
字體:
供稿:網(wǎng)友

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

題目描述

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

輸入描述

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

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

swap函數(shù)將新的元素與之前的所有元素交換,返回一個列表,每一次交換都插入一個元素,因此是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: #處理重復(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[:] # 注意這個地方 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 resultprint(swap('1', '234'))>>>>['1', '2', '3', '4', '2', '1', '3', '4', '3', '2', '1', '4', '4', '2', '3', '1']

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

這個地方要用+號,因為是加上每次調(diào)用的結(jié)果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) #這里返回的是一個數(shù)組,數(shù)組加數(shù)組使用+,數(shù)組加元素使用append符號 return result

按照字典排序

這里我按照冒泡字典排序,實際上沒有必要,比較字符大小直接可以用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:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 台安县| 库伦旗| 揭阳市| 吴桥县| 甘洛县| 会泽县| 池州市| 昌吉市| 门源| 东城区| 大田县| 湘阴县| 松潘县| 棋牌| 南通市| 济源市| 江山市| 郓城县| 溧阳市| 九寨沟县| 柘荣县| 建平县| 兴城市| 伊通| 永仁县| 绍兴县| 兴业县| 洛扎县| 龙井市| 甘肃省| 绥芬河市| 会理县| 石门县| 盱眙县| 瑞昌市| 康乐县| 伊川县| 民丰县| 沾化县| 施甸县| 鲁甸县|