Я пытаюсь найти способ определить все возможные слова, которые можно записать по заданному числу, с учетом сопоставления алфавитов со значениями.
В конечном итоге я хочу найти решение, которое работает для любого однозначного или двузначного сопоставления значений для буквы, но для иллюстрации предположим, что A = 1, B = 2, ... Z = 26.
Пример: 12322
может быть равен abcbb (1,2,3,2,2)
, lcbb (12,3,2,2)
, awbb (1,23,2,2)
, abcv (1,2,3,22)
, awv (1,23,22)
или lcv (12,3,22)
.
Вот что я думал до сих пор:
Я построю дерево из всех возможных слов, используя число.
Для этого я начну с дерева с одним корневым узлом с фиктивными данными.
Я проанализирую число цифра, начиная с самой младшей цифры.
На каждом шаге я беру последнюю цифру оставшейся части числа и вставляю ее в левое поддерево текущего узла, и удаляю эту цифру из номера для левого поддерева этого узла. Затем для того же узла я проверю, образуют ли предыдущие ДВЕ цифры вместе действительный алфавит, и если да, я помещу их в правильное поддерево (и уберу 2 цифры из номера для правого поддерева этого узла).
Затем я буду рекурсивно повторять вышеупомянутые шаги для каждого узла, используя оставшуюся часть номера, пока не останется больше цифр.
Чтобы проиллюстрировать, для 12322
мое дерево будет выглядеть примерно так:
*
/ \
/ \
2 22
/ / \
2 3 23
/ \ / \ /
3 23 2 12 1
/ \ / /
2 12 1 1
/
1
Чтобы получить слова, я пройду все возможные пути от листьев до узлов.
Это кажется слишком сложным решением для того, что я считал довольно простой проблемой, и я пытаюсь выяснить, есть ли более простой способ решить эту проблему.