восходящий вопрос минимального изменения алгоритма - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь получить все перестановки числа 4, такие как 1,12,21,123,132, ... 1234,1243,1423,4123, ... т. Д. (Есть 24), и мы должны использовать нижнийдо минимального изменения algrothem, но в моем коде, когда он должен двигаться дальше, он застревает на 1,2 и 2,1, так что мне было интересно, если кто-нибудь может помочь.Мой код - это метод, который вы вызываете и задаете номер, после чего он должен вернуть вам список всех перестановок.Все печатные отчёты для отладки, так что в итоге их там не будет.Любая помощь будет потрясающей!Спасибо

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 

1 Ответ

0 голосов
/ 22 марта 2019

Вы можете использовать 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)]
...