📜  从给定序列打印两个可能的排列(1)

📅  最后修改于: 2023-12-03 15:06:37.875000             🧑  作者: Mango

从给定序列打印两个可能的排列

这个题目的意思是给定一个序列,例如 [1, 2, 3],将其打印出可能的两个排列,例如 [1, 2, 3] 和 [1, 3, 2]。可以使用递归的方法来解决这个问题,下面是一个 Python 的实现。


def permutations(arr: List[int]) -> List[List[int]]:
    if len(arr) <= 1:
        return [arr]

    result = []
    for i in range(len(arr)):
        rest = arr[:i] + arr[i + 1 :]
        for perm in permutations(rest):
            result.append([arr[i]] + perm)

    return result

def print_two_permutations(arr: List[int]) -> None:
    perms = permutations(arr)
    print(perms[0])
    print(perms[1])

这段代码的关键是 permutations 函数,它使用递归的方法来计算所有可能的排列。首先,如果输入序列只有一个元素,那么它的排列只有它自己。这是递归的基本情况。否则,对于序列中的每个元素,我们可以将它放在排列的第一个位置,然后排列剩余的元素。这个过程可以递归进行,直到序列中只剩下一个元素,然后我们将所有的排列组合起来得到结果。注意,每次递归都需要将当前位置的元素从序列中删除,并将其加入待排列的元素列表中。

在 print_two_permutations 函数中,我们调用 permutations 函数获取所有可能的排列,并打印前两个排列。注意,这里的输入参数 arr 必须是一个列表,而不是一个数字或字符串。

这段代码的时间复杂度是 O(n!), 对于长度为 n 的序列,会生成 n! 个排列。因此,它只适用于较小规模的序列。