自下而上的最小变化算法问题

问题描述 投票:0回答:1

我试图获得数字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 
python-3.x algorithm repeating
1个回答
-2
投票

您可以使用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)]
© www.soinside.com 2019 - 2024. All rights reserved.