[英]Permutations of a list using stack
我试图找到一种方法来枚举数字列表的所有组合,而无需递归或使用 itertools。 我想出了一个有效的解决方案,但我认为它毕竟变成了一个递归函数。 我是 Python 新手,不确定如何在没有递归的情况下完成这项工作。
感谢任何帮助,因为我认为我仍然没有看到两者之间的区别。
result = []
def permutation(li):
if len(li) == 1:
result.append(li[0])
print (result)
result.pop()
return
for i in range(0,len(li)):
result.append(li[i])
permutation(li[:i] + li[i+1:])
result.pop()
permutation([1,2,3])
想出一个“就像那样”的算法,在不使用递归的情况下产生所有排列并不是那么直观。
但是存在几种不同的此类算法。 看看堆的算法,例如:
def permutation(li):
n = len(li)
c = [0] * n
print(li)
i = 1
while i < n:
if c[i] < i:
j = c[i] if i % 2 else 0
li[j], li[i] = li[i], li[j]
print(li)
c[i] += 1
i = 1
else:
c[i] = 0
i += 1
我一直很喜欢这个方法:
直到队列中每个变体的长度等于输入的长度:将下一个输入元素放在每个变体的所有位置
input [1,2,3]
queue [[1]]
insert 2 in all positions of each variation
queue [[2,1],[1,2]]
insert 3 in all positions of each variation
queue [[3,2,1],[2,3,1],[2,1,3],[3,1,2],[1,3,2],[1,2,3]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.