J'essaie de trouver un moyen de déterminer tous les mots possibles qui peuvent être épelés par un nombre donné, étant donné un mappage des alphabets aux valeurs. Je veux finalement trouver une solution qui fonctionne pour n'importe quelle correspondance de valeur à 1 ou 2 chiffres pour une lettre, mais pour l'illustration, supposons A = 1, B = 2, ... Z = 26.Algorithme pour trouver les mots épelés par un nombre
Exemple: 12322
peut être égal à 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)
ou lcv (12,3,22)
.
Voici ce que j'ai pensé jusqu'à présent:
Je vais construire un arbre de tous les mots possibles en utilisant le nombre. Pour ce faire, je vais commencer avec un arbre avec un nœud racine avec des données factices. J'analyserai alors le chiffre chiffre par chiffre à partir du chiffre le moins significatif.
À chaque étape, je vais prendre le dernier chiffre de la partie restante du numéro et l'insérer dans la sous-arborescence gauche du nœud actuel, et retirer ce chiffre du numéro pour le sous-arbre gauche de ce nœud. Pour le même nœud, je vérifierai ensuite si les deux derniers chiffres forment ensemble un alphabet valide, et si oui, je les mettrai dans le sous-arbre droit (et enlève les 2 chiffres du numéro pour le sous-arbre droit de ce nœud).
Je vais ensuite répéter les étapes ci-dessus de manière récursive pour chaque nœud, en utilisant la partie du nombre qui reste, jusqu'à ce qu'il ne reste plus de chiffres.
Pour illustrer, pour 12322
mon arbre ressemblera à quelque chose comme ceci:
*
/ \
/ \
2 22
/ / \
2 3 23
/ \ /\ /
3 23 2 12 1
/\ //
2 12 1 1
/
1
Pour obtenir les mots, je vais parcourir tous les chemins possibles à partir des feuilles aux nœuds.
Cela semble être une solution trop complexe pour ce que je pensais être un problème assez simple, et je suis en train de trouver s'il y a un moyen de résoudre ce simple.
(12,3,22) devrait être lcv – pierrotlefou
merci! Corrigée. – hexium