求字串全排列 python實現
阿新 • • 發佈:2019-02-06
演算法思想
輸入一個字串,列印這個字串中字元的全排列。
eg:
輸入:abc
輸出:abc acb bac bca cab cba
思路:將求字串的全排列分解為兩步:
第一步是確定第一個位置的字元,就是第一個位置與後邊的所有字元進行交換。
第二步,就是對除了第一個位置的後邊所有位置的字元進行相同處理;直至剩下一個字元,列印;
具體的演算法流程如下
遞迴的出口,就是隻剩一個字元的時候,遞迴的迴圈過程,就是從每個子串的第二個字元開始依次與第一個字元交換,然後繼續處理子串,如果有重複的,然後對結果使用set去重就可以了
#具體程式碼
def perm(s=''): if len(s) <= 1: return [s] sl = [] for i in range(len(s)): for j in perm(s[0:i] + s[i + 1:]): sl.append(s[i] + j) return sl def main(): # 可能包含重複的串 perm_nums = perm('abb') # 對結果去重 no_repeat_nums = list(set(perm_nums)) print('perm_nums', len(perm_nums), perm_nums) print('no_repeat_nums', len(no_repeat_nums), no_repeat_nums) pass if __name__ == '__main__': main()