Maison >interface Web >js tutoriel >Questions amusantes JavaScript : combinaisons pratiques de permutations

Questions amusantes JavaScript : combinaisons pratiques de permutations

黄舟
黄舟original
2017-02-04 15:08:361366parcourir

Tout d’abord, regardons cette image, qui ressemble au bureau à boutons des téléphones phablettes à l’ancienne.

Questions amusantes JavaScript : combinaisons pratiques de permutations

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 (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn