Вы можете сделать это рекурсивно.
Общее количество способов кодирования первых n цифр равно (количество способов кодирования первых n-1 цифр, если последняя цифра равна 1 <= d <= 9) + (количество способов кодирования первых n-2 цифр, если последние две цифры 10 <= dd <= 26). </p>
Кэшировать результаты или использовать динамическое программирование для предотвращения экспоненциального взрыва.Техника очень похожа на вычисление чисел Фибоначчи.
Вот как вы можете сделать это в Python, чтобы продемонстрировать принцип:
# s is of form [1-9][0-9]*
s = '121518'
a=1 # Cache of f(i - 2)
b=1 # Cache of f(i - 1)
for i in range(1, len(s)):
a, b = b, a * (10 <= int(s[i - 1: i + 1]) <= 26) + b * (s[i] != '0')
print b
Вы можете сделать это аналогичным образом в C ++,но так как это, кажется, домашнее задание / учебное упражнение, я надеюсь, вы не возражаете, что я оставлю вас для проработки деталей в C ++.