整数のリスト([1,2,3]など)をとり、可能なすべての順列を出力するメソッドdef permutations(lst)
を作成しようとしています、なし再帰を使用します。私はまた、このメソッドでスタックやキューを使用する必要があります。スタックやキューを使ったPythonでのintリストの置換
は、これまでのところ私が持っている:
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を印刷すると(エンキュー行を印刷するだけで置き換える)、正しい出力が得られます。 [1,2,3]、 [2,1,3]、[3,1,2]、[1,3,2]、[2,3,1]、[3,2,1]] 。
エンキューを使用するようにコードを変更するにはどうすればよいですか?任意の提案が高く評価されました。
おそらく、組み込みの順列機能を使用できないようなアライメントですか? – roganjosh
標準の[collections.dqueue](https://docs.python.org/3/library/collections.html#collections.deque)クラスを使用できます。 –