Краткое решение без рекурсии: использование двоичных комбинаций (представьте 0
, 1
, 10
, 11
и т. Д.) Для определения места вставки точек.
Между каждой буквой ставьте точку, если в этом индексе есть 1
, и пустую строку, когда есть 0
.
your_string = "1234"
def dot_combinations(string):
i = 0
combinations = []
# Iter while the binary representation length is smaller than the string size
while i.bit_length() < len(string):
current_word = []
for index, letter in enumerate(string):
current_word.append(letter)
# Append a dot if there's a 1 in this position
if (1 << index) & i:
current_word.append(".")
i+=1
combinations.append("".join(current_word))
return combinations
print dot_combinations(your_string)
Выход:
['1234', '1.234', '12.34', '1.2.34', '123.4', '1.23.4', '12.3.4', '1.2.3.4']