Я пытаюсь найти способ определить все возможные слова, которые могут быть записаны на заданное число, учитывая сопоставление алфавитов с значениями.Алгоритм для поиска слов, выраженных числом
В конечном итоге я хочу найти решение, которое работает для любого 1- или 2- цифрового сопоставления значений для буквы, но для иллюстрации предположим, что 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
Чтобы получить слова, то я буду обходить все возможные пути от листьев к узлам.
Это, как представляется, слишком сложное решение для того, что я думал, будет довольно простая задача, и я пытаюсь найти, если есть более простой способ решить эту проблему.
(12,3,22) должно быть lcv – pierrotlefou
спасибо! Исправленный. – hexium