2013-08-14 17 views
5

Belirli bir dizenin tüm permütasyonlarını bulmak için this basit ve zarif python çözümünü okudum. Bu tekrarlayıcıdır. Buna dayanarak python'da yinelemeli bir çözüm uygulamaya çalıştım.İteratif çözüm: - Dize permütasyonlarını bulma

Kodum aşağıda. Ama sadece 3 karakter dizisi için çalışır: (recursion base case koşul ve özyeyiş koşulu yineleme (non-özyinelemeli) nasıl çevirdiğini anlamaya çalışıyorum. Herhangi bir işaretçi yinelemeli bir çözüm çalışmasına yardımcı olur. (Ya bu algoritma veya herhangi bir algoritması çok basit olduğundan bir yığın kullanarak bir yineleme için her özyinelemeye dönüştürebilir. Ancak bu durumda bile basittir

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

cevap

12

) diğer. özyinelemeye daha genel dönüşüm için

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 

bir yığınla yineleme this

numaralı belgede okundu
+0

Çözüm için teşekkürler. – goldenmean

+0

excellent.elegant – user2290820

+0

kusursuz ve düzgün! – deeshank