1. 程式人生 > >求字串全排列 python實現

求字串全排列 python實現

演算法思想

輸入一個字串,列印這個字串中字元的全排列。
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()

附上c語言實現

c語言實現

參考