Tout d’abord, regardons cette image, qui ressemble au bureau à boutons des téléphones phablettes à l’ancienne.
Si nous appuyons sur la touche "2", nous pouvons appeler les trois lettres "A", "B" et "C".
À l'exception des touches « 1 » et « 0 », d'autres touches numériques peuvent appeler une variété de lettres.
Maintenant, la question est la suivante : si je sélectionne quatre touches numériques arbitraires, combien de combinaisons alphanumériques puis-je obtenir ?
Par exemple, j'ai sélectionné "0002", car la touche "0" n'a pas de lettre correspondante, il n'y a donc que trois combinaisons - "000A", "000B" et "000C".
Prenons un exemple plus compliqué. Appuyez sur "0023" en continu, "0" reste inchangé, "2" peut correspondre à "A", "B", "C", "3" peut correspondre à "D", " E", "F", alors, selon la connaissance de la permutation et de la combinaison, il devrait y avoir 1*1*3*3=9 combinaisons.
D'accord, voyons comment résoudre ce problème.
La première étape consiste à établir une cartographie basée sur la relation entre les touches numériques et les lettres correspondantes.
var map = { 1 : [ 1 ], 2 : [ "A", "B", "C" ], 3 : [ "D", "E", "F" ], 4 : [ "G", "H", "I" ], 5 : [ "J", "K", "L" ], 6 : [ "M", "N", "O" ], 7 : [ "P", "Q", "R", "S" ], 8 : [ "T", "U", "V" ], 9 : [ "W", "X", "Y", "Z" ], 0 : [ 0 ] };
La deuxième étape consiste à utiliser la récursivité pour résoudre des permutations et des combinaisons
function telephoneWords(digitString) { var array = []; var result = []; digitString.split("").forEach(function(e) { array.push(map[e]); }) var traverse = function foo(from, to) { if (to.length < 4) { var cur = from.shift(); for (var i = 0; i < cur.length; i++) { var newTo = to.slice(0); newTo.push(cur[i]); var newFrom = from.slice(0); foo(newFrom, newTo); } } else { result.push(to.join("")); } }; traverse(array, []); return result; }
Ce qui précède est le contenu de questions intéressantes en JavaScript : permutations et combinaisons pratiques Pour en savoir plus. contenu associé, veuillez faire attention à PHP Chinese Net (m.sbmmt.com) !