ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の楽しい質問: 置換の実践的な組み合わせ

JavaScript の楽しい質問: 置換の実践的な組み合わせ

黄舟
黄舟オリジナル
2017-02-04 15:08:361301ブラウズ

まず最初に、古いファブレット電話のボタンデスクトップに似たこの写真を見てみましょう。

JavaScript の楽しい質問: 置換の実践的な組み合わせ

「2」キーを押すと、「A」、「B」、「C」の 3 つの文字を呼び出すことができます。
「1」と「0」キーを除いて、他の数字キーはさまざまな文字を呼び出すことができます。
ここで問題は、4 つの任意の数字キーを選択して、英数字の組み合わせをいくつ取得できるかということです。
たとえば、「0002」を選択したのは、「0」キーには対応する文字がないため、その組み合わせは「000A」、「000B」、「000C」の 3 つだけです。
より複雑な例を見てみましょう。「0023」を押し続けると、「0」は変化せず、「2」は「A」、「B」、「C」に対応し、「3」は「D」、「」に対応します。 E" 、 "F" の場合、順列と組み合わせの知識によれば、1*1*3*3=9 個の組み合わせが存在するはずです。
それでは、この問題を解決する方法を見てみましょう。
最初のステップは、数字キーと対応する文字との関係に基づいてマッピングを確立することです。

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

2 番目のステップは、再帰を使用して順列と組み合わせを解決することです

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

上記は、JavaScript の興味深い質問の内容です: 実践的な順列と組み合わせ 詳細については、PHP 中国語 Web サイト (www. php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。