2016-03-25 12 views
1

Başlığım için gerçekten üzgünüm ama sorumu kelimelerle nasıl anlatacağımı bilmiyorum. Benim işlevi üretmek olması beklenen,İki öğenin tüm birleşimini uzaklığa getirin 1

bir dize "123" olduğunu varsayalım: Yani burada örnektir

1 2 3 4 
12 3 4 
12 34 
1 23 4 
1 2 34 

isterim:

1 2 3 
12 3 
1 23 

veya dize "1234" için

herhangi bir yardım veya tasarım tarifi takdir edin.

+0

dikkat - n uzunluğunda bir dizi için çıkışların sayısı, bu hızla tamamen olur f0 = 0 sayarak ve n + 1th Fibonacci sayıdır yönetilemez. Bunu yapman gerektiğine emin misin? Bunu yaparak çözmeye çalıştığınız sorun ne olursa olsun, muhtemelen çok daha etkili bir yaklaşıma sahip olabilirsiniz. – user2357112

+0

Bu, [dinamik programlama] için bir işe benziyor (https://en.wikipedia.org/wiki/Dynamic_programming). '130' ve 1306'yı çevirmenin yollarının sayısını çevirmek için gereken yol sayısı verildiyse, bu bilgiyi 13065'i çevirmenin yollarını hızlı bir şekilde belirlemek için nasıl kullanırsınız? Bunu anladıktan sonra, bir fikir fikrini konuyla ilgili bir temel oluşturabilirsin. – user2357112

cevap

0

Basit bir özyinelemeli yaklaşım: Her adımda dizeden 1 veya iki karakter alın ve sonra bu yöntemi geri kalanına yinelemeli olarak uygulayın. Burada

def recurse(left, right, combinations): 
    if len(right) > 1: 
     recurse(left + ' ' + right[:2], right[2:], combinations) 
    if len(right) > 0: 
     recurse(left + ' ' + right[:1], right[1:], combinations) 
    if len(right) == 0: 
     combinations.append(left) 
def get_combinations(base): 
    combinations = [] 
    recurse('', base, combinations) 
    return combinations 
print('\n'.join(print_combinations('abcde'))) 

ve

çıktısı:

ab cd e 
ab c de 
ab c d e 
a bc de 
a bc d e 
a b cd e 
a b c de 
a b c d e 
+0

çok teşekkür ederim –

İlgili konular