2013-08-14 9 views
5

Ich lese this einfache und elegante Python-Lösung zum Finden aller Permutationen einer gegebenen Zeichenfolge. Es ist rekursiv. Darauf aufbauend habe ich versucht, eine iterative Lösung in Python zu implementieren.Iterative Lösung für: - Finden von String-Permutationen

Unten ist mein Code. Aber es funktioniert nur für 3-Zeichen-Strings :(Stuck versucht zu sehen, wie die Rekursion Base Case-Bedingung und Rekursion Bedingung in iterative (nicht-rekursive) übersetzt Any Pointer würde helfen, eine iterative Lösung arbeiten. (Entweder basierend auf diesem Algorithmus oder andere andere)

def permutations_iter(word): 
while True: 
    perms = [] 
    result = [] 

    char = word[0] 
    new_word = word[1:] 

    if len(new_word)==2: 
     perms = [new_word,''.join(reversed(new_word))] 

    for perm in perms: 
     #insert the character into every possible location 
     for i in range(len(perm)+1): 
      result.append(perm[:i] + char + perm[i:]) 
    return result 

    if len(new_word)==2: 
     break; 


    #example code to call this iterative function   
    print permutations_iter("LSE") 

Antwort

12

Sie jede Rekursion zu einer Iteration mit einem Stapel umwandeln kann. Aber es ist in diesem Fall noch einfacher, da der Algorithmus ist sehr einfach.

def perms(word): 
    stack = list(word) 
    results = [stack.pop()] 
    while len(stack) != 0: 
     c = stack.pop() 
     new_results = [] 
     for w in results: 
      for i in range(len(w)+1): 
       new_results.append(w[:i] + c + w[i:]) 
     results = new_results 
    return results 

Für eine allgemeinere Umwandlung von Rekursion Iteration mit einem Stapel lesen this

+0

Danke für den Link, der erklärt Und für die Lösung. – goldenmean

+0

excellent.elegant – user2290820

+0

perfekt und ordentlich! – deeshank