我正在尝试使用以下代码的递归来获得数组的排列
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]]
请帮助我我的代码有什么问题
这是因为您附加到
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
。