我试图获得数字4的所有排列,如1,12,21,123,132,... 1234,1243,1423,4123,...等(有24),我们必须使用自下而上的最小 - 改变algrothem,但在我的代码中它应该继续前进它被卡在1,2和2,1 sooo我想知道是否有人可以帮助。我的代码是您调用并给出一个数字的方法,然后它应该返回所有排列的列表。所有的打印声明在哪里进行调试,最终他们不会在那里。任何帮助都会很棒!谢谢
def min_change(num):
end=[]
A=[]
for i in range(1,num):
A.append(i)
print("appened i",A)
end.append(A)
for j in end:
print("entered j",j)
if len(j)==i:
print("made past if")
if len(j)!=1:
x=len(j)-1
while x>0:
print("this is x ",x)
B=A
end.append(B)
temp=B[x-1]
B[x-1]=B[x]
B[x]=temp
print(B)
x=x-1
return end
您可以使用itertools执行该任务:
# Option 1.
list(it.chain(*(it.permutations(range(1, i+1)) for i in range(1, 5))))
# Option 2.
list(j for i in range(1, 5) for j in it.permutations(range(1, i+1)))
输出是33种不同的可能排列:
[(1,),
(1, 2),
(2, 1),
(1, 2, 3),
(1, 3, 2),
(2, 1, 3),
(2, 3, 1),
(3, 1, 2),
(3, 2, 1),
(1, 2, 3, 4),
(1, 2, 4, 3),
(1, 3, 2, 4),
(1, 3, 4, 2),
(1, 4, 2, 3),
(1, 4, 3, 2),
(2, 1, 3, 4),
(2, 1, 4, 3),
(2, 3, 1, 4),
(2, 3, 4, 1),
(2, 4, 1, 3),
(2, 4, 3, 1),
(3, 1, 2, 4),
(3, 1, 4, 2),
(3, 2, 1, 4),
(3, 2, 4, 1),
(3, 4, 1, 2),
(3, 4, 2, 1),
(4, 1, 2, 3),
(4, 1, 3, 2),
(4, 2, 1, 3),
(4, 2, 3, 1),
(4, 3, 1, 2),
(4, 3, 2, 1)]