我试图写一个方法def permutations(lst)
,它接受一个整数列表(如[1,2,3]),并使用递归打印它的所有可能的置换,,而不是。在这个方法中,我还必须使用堆栈和/或队列。在
到目前为止,我已经:
class Queue:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def enqueue(self, item):
self.items.insert(0,item)
def dequeue(self):
return self.items.pop()
def size(self):
return len(self.items)
def __rep__(self):
return str(self.items)
def permutation(lst):
temp = [0] * len(lst)
q = Queue()
q.enqueue(lst)
i = 1
while i < len(lst):
if temp[i] < i:
j = temp[i] if i % 2 else 0
lst[j], lst[i] = lst[i], lst[j]
q.enqueue(lst)
temp[i] += 1
i = 1
else:
temp[i] = 0
i += 1
return q.__rep__()
l = [1,2,3]
print(permutation(l))
但我得到的输出是:[[3,2,1],[3,2,1],[3,2,1],[3,2,1],[3,2,1],[3,2,1]]。在
但是,当我打印lst而不是排队时(用print替换排队行),我得到了正确的输出。[[1,2,3], [2,1,3],[3,1,2],[1,3,2],[2,3,1],[3,2,1]]。在
如何修改代码以使用排队?有什么建议,谢谢。在
问题
问题出在
enqueue
中的列表引用中:有六个引用到同一个列表。每次你改变一个元素,你就改变了所有元素。在中间点打印q
,您将看到效果:输出:
^{pr2}$相反,当您排队时,请复制列表:
这将为您提供所需的输出。在
相关问题 更多 >
编程相关推荐