Python 整数递归排列和 returns 一组元组

Python recursive permutation by integer and returns a set of tuples

首先,我搜索了很多网站,并花了很多时间寻找实现这一特定要求的方法。仅举几例,来自 SO 的 this and 和来自外部站点的许多其他人。

这个要求很容易理解。

我不能使用import,只能使用递归来完成这个任务。光靠这个功能肯定能自己解决问题。不允许辅助函数。

我必须用这个定义写一个函数:

def permutation(n: int) -> set[tuple[int]]:

调用permutation(3)时的预期结果如下:

{(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),(3,2,1)}

我很沮丧,我无法在这里提供任何有用的尝试。我试图为此想出一个解决方案,但想不出任何有用的东西。因此,我没有示例代码可以开始。

想法是,如果您可以获得 n - 1 的每个排列的列表,则可以在这些排列结果中的每个点之间插入 n

def permutation(n):
    if n == 0:
        # base case
        return {()}
    result = set()
    for x in permutation(n - 1):
        for i in range(n):
            # insert n in position i in the permutation of all of the lesser numbers
            result.add(x[:i] + (n,) + x[i:])
    return result