>  기사  >  웹 프론트엔드  >  JavaScript 재미있는 질문: 순열의 실용적인 조합

JavaScript 재미있는 질문: 순열의 실용적인 조합

黄舟
黄舟원래의
2017-02-04 15:08:361347검색

우선 옛날 패블릿폰의 버튼 바탕화면과 비슷한 이 사진부터 보시죠.

JavaScript 재미있는 질문: 순열의 실용적인 조합

'2' 키를 누르면 'A', 'B', 'C' 세 글자를 불러올 수 있습니다.
'1'과 '0' 키를 제외한 다른 숫자 키는 다양한 문자를 불러올 수 있습니다.
이제 질문은 임의의 숫자 키 4개를 ​​선택하면 몇 개의 영숫자 조합을 얻을 수 있느냐는 것입니다.
예를 들어 "0" 키에는 해당 문자가 없으므로 "0002"를 선택했습니다. 따라서 "000A", "000B", "000C"의 세 가지 조합만 있습니다.
좀 더 복잡한 예를 들어보겠습니다. "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 ]  
};

두 번째 단계는 재귀를 사용하여 순열과 조합을 푸는 것입니다

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 중국어 홈페이지(www.php.cn)를 주목해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.