【发布时间】:2020-08-25 17:44:59
【问题描述】:
我是编程新手,遇到了一些基本的回溯问题。其中之一是打印列表的所有可能排列。我从网上得到以下代码。
def permutation(arr,size,n):
if size == 1:
print(arr)
return
for i in range(size):
permutation(arr,size-1,n)
if size & 1:
arr[0],arr[size-1] = arr[size-1],arr[0]
else:
arr[i],arr[size-1] = arr[size-1],arr[i]
这工作正常,它为输入 arr = [1,2,3] 打印了以下输出
[1,2,3] [2,1,3] [3,1,2] [1,3,2] [2,3,1] [3,2,1]
现在我想将所有这些可能的排列存储到一个不同的数组中,并将代码修改为这个。
ans = []
def permutation(arr,size,n):
if size == 1:
ans.append(arr)
for i in range(size):
permutation(arr,size-1,n)
if size & 1:
arr[0],arr[size-1] = arr[size-1],arr[0]
else:
arr[i],arr[size-1] = arr[size-1],arr[i]
但是当我打印列表时,它打印了这个。
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
我在这里做错了什么?如何将所有可能的排列存储到一个列表中?
【问题讨论】:
-
在
if size == 1:之后,您在第一个代码中有return,但在第二个代码中没有 -
人们仍然支持重复最多的 Python 问题。很奇怪。
-
@superbrain 这里的问题是使用两个看似相同的代码,但实际上并不相同。从这个意义上说,它不是重复的
-
@JanStránský 这里唯一不重复的是同一个列表对象一遍又一遍地填充到结果列表中。与其他问题相同的问题。
标签: python recursion permutation backtracking