Heim  >  Artikel  >  Web-Frontend  >  Lustige Fragen zu JavaScript: Praktische Kombinationen von Permutationen

Lustige Fragen zu JavaScript: Praktische Kombinationen von Permutationen

黄舟
黄舟Original
2017-02-04 15:08:361348Durchsuche

Schauen wir uns zunächst dieses Bild an, das dem Tasten-Desktop altmodischer Phablet-Telefone ähnelt.

Lustige Fragen zu JavaScript: Praktische Kombinationen von Permutationen

Wenn wir die Taste „2“ drücken, können wir die drei Buchstaben „A“, „B“ und „C“ aufrufen.
Mit Ausnahme der Tasten „1“ und „0“ können andere Zifferntasten eine Vielzahl von Buchstaben aufrufen.
Die Frage ist nun: Wie viele alphanumerische Kombinationen erhalte ich, wenn ich vier beliebige Zifferntasten auswähle?
Zum Beispiel habe ich „0002“ ausgewählt, weil die Taste „0“ keinen entsprechenden Buchstaben hat und es daher nur drei Kombinationen davon gibt – „000A“, „000B“ und „000C“.
Nehmen wir ein komplizierteres Beispiel. Drücken Sie kontinuierlich „0023“, „0“ bleibt unverändert, „2“ kann „A“, „B“, „C“ entsprechen, „3“ kann „D“ entsprechen. „E“, „F“, dann sollte es entsprechend dem Wissen über Permutation und Kombination 1*1*3*3=9 Kombinationen geben.
Okay, mal sehen, wie wir dieses Problem lösen können.
Der erste Schritt besteht darin, eine Zuordnung basierend auf der Beziehung zwischen den Zifferntasten und den entsprechenden Buchstaben zu erstellen.

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 ]  
};

Der zweite Schritt besteht darin, Rekursion zu verwenden, um Permutationen und Kombinationen zu lösen

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;  
}

Das Obige ist der Inhalt von JavaScript-interessanten Fragen: praktische Permutationen und Kombinationen Weitere Informationen Verwandte Inhalte, achten Sie bitte auf PHP Chinese Net (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn