拋出問題
求任意一個字符串的全排列組合,例如a='123',輸出 123,132,213,231,312,321。
解決方案
#字符串任意兩個位置字符交換 def str_replace(str, x, y): if x == y: return str x_val = str[x:x+1] y_val = str[y:y+1] if x < y: str = str[0:x] + y_val + str[x+1:y] + x_val + str[y+1:len(str)] else: str = str[0:y] + x_val + str[y+1:x] + y_val + str[x+1:len(str)] return str #遞歸求結果 def str_sort(str,x): if x == len(str): #當x為字符串的最大長度時返回當前字符交換的結果 global str_list str_list.append(str) return for i in range(x,len(str)): if str[i] not in str[x:i]: str = str_replace(str,i,x) #遞歸遍歷第i個字符, str_sort(str,x+1) str = str_replace(str,x,i) #恢復字符串原來的順序,便於下次遍歷 else: return s = 'abcc' global str_list str_list = [] str_sort(s,0) print(len(str_list), str_list)
相較於有重復的方法,只是多了一步,也就是在遍歷第i個元素前,做個判斷,就是當前需要交換的字符是否是已經‘打頭’,如果有了就忽略,繼續執行
可能我解釋的理解的也不是很到位,歡迎加Q交流 1156553820