两种方法用Python实现字符的全排列问题(迭代法、递归法)

实现一串数据的全排列是一个非常经典的问题
今天我来分享两种求法
首先是递归法

def all_words_recursive(s, i):
    if i == len(s):
        print(''.join(s))
    else:
        for j in range(i, len(s)):
            s[j], s[i] = s[i], s[j]
            all_words_recursive(s, i + 1)
            s[j], s[i] = s[i], s[j]

然后是迭代法

def factorial_recursion(n):
    if n == 1:
        return 1
    return n * factorial_recursion(n - 1)


def all_words_iterative(letter):
    n = len(letter)
    permutation_list = [0 for i in range(factorial_recursion(n))]
    temporary_list = [letter[0]]

    for temp_x in range(2, n + 1):
        count = 0
        for temp_i in temporary_list:
            for temp_j in temp_i:
                permutation_list[count] = temp_i.replace(temp_j, letter[temp_x - 1] + temp_j)
                count += 1
            permutation_list[count] = temp_i + letter[temp_x - 1]
            count += 1
        temporary_list = [permutation_list[i] for i in range(factorial_recursion(temp_x))]

    for i in temporary_list:
        print(i)

整合版如下

def all_words_recursive(s, i):
    if i == len(s):
        print(''.join(s))
    else:
        for j in range(i, len(s)):
            s[j], s[i] = s[i], s[j]
            all_words_recursive(s, i + 1)
            s[j], s[i] = s[i], s[j]


def factorial_recursion(n):
    if n == 1:
        return 1
    return n * factorial_recursion(n - 1)


def all_words_iterative(letter):
    n = len(letter)
    permutation_list = [0 for i in range(factorial_recursion(n))]
    temporary_list = [letter[0]]

    for temp_x in range(2, n + 1):
        count = 0
        for temp_i in temporary_list:
            for temp_j in temp_i:
                permutation_list[count] = temp_i.replace(temp_j, letter[temp_x - 1] + temp_j)
                count += 1
            permutation_list[count] = temp_i + letter[temp_x - 1]
            count += 1
        temporary_list = [permutation_list[i] for i in range(factorial_recursion(temp_x))]

    for i in temporary_list:
        print(i)


s = 'asd'
print('递归')
all_words_recursive(list(s), 0)
print('迭代')
all_words_iterative(s)

效果图:
在这里插入图片描述

一起学习python,小白指导,教学分享记得私信我

猜你喜欢

转载自blog.csdn.net/Miku_wx/article/details/112521147