2013-08-14 9 views
5

Ho letto this una soluzione python semplice ed elegante per trovare tutte le permutazioni di una determinata stringa. È ricorsivo. Sulla base di ciò ho cercato di implementare una soluzione iterativa in python.Soluzione iterativa per: - Trovare permutazioni di stringa

Di seguito è riportato il mio codice. Ma funziona solo per le stringhe di 3 caratteri :(Stuck che prova a vedere come la condizione del caso base di ricorsione e la condizione di ricorsione si traducono in iterativo (non ricorsivo) Qualsiasi puntatore potrebbe aiutare a ottenere una soluzione iterativa funzionante (o basata su questo algoritmo o su qualsiasi altro)

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") 

risposta

12

è possibile convertire ogni ricorsione per un'iterazione usando una pila. Ma in questo caso è ancora più semplice dal momento che l'algoritmo è molto semplice.

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 

per una conversione più generale di ricorsione per iterazione con una pila leggere this

+0

Grazie per il link che ha spiegato E per la soluzione. – goldenmean

+0

excellent.elegant – user2290820

+0

perfetto e pulito! – deeshank