使用递归对数组进行排列:Python

问题描述 投票:0回答:1

我正在尝试使用以下代码的递归来获得数组的排列

ans = []
def helper(a, i):
    if i == len(a):
        ans.append(a)
    for j in range(i, len(a)):
        a[i],a[j] = a[j], a[i]
        helper(a, i+1)
        a[i],a[j] = a[j], a[i]

helper([1,2,3],0)
    
print(ans)

使用上面的代码我得到下面的结果,这是错误的

[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]

请帮助我我的代码有什么问题

python arrays recursion permutation
1个回答
1
投票

这是因为您附加到

ans
的列表只是引用,在执行 for 循环的最后一条语句后,它会更改为原始列表。尝试复制列表并检查结果。

ans = []

def helper(a, i):
    if i == len(a):
        ans.append(a[:])
    for j in range(i, len(a)):
        a[i],a[j] = a[j], a[i]
        helper(a, i+1)
        a[i],a[j] = a[j], a[i]

helper([1,2,3],0)
    
print(ans)
# Output
# [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]

此处

a[:]
复制列表并将其附加到
ans

© www.soinside.com 2019 - 2024. All rights reserved.