Leetcode 17. Letter Combinations of a Phone Number javascript解决方案

475 阅读1分钟

利用递归。2个2个拆分处理

/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function(digits) {
    digits = digits.split('');
    let toCal = digits.reduce((ll, el) => {
        ll.push(transferToLetters(el));
        return ll;
    }, []);
    return multiChance(...toCal);
    
    function transferToLetters(num){
        switch(num + ''){
            case '2':
                return ['a', 'b', 'c'];
            case '3':
                return ['d', 'e', 'f'];
            case '4':
                return ['g', 'h', 'i'];
            case '5':
                return ['j', 'k', 'l'];
            case '6':
                return ['m', 'n', 'o'];
            case '7':
                return ['p', 'q', 'r', 's'];
            case '8':
                return ['t', 'u', 'v'];
            case '9':
                return ['w', 'x', 'y', 'z'];
            default:
                return [];
        }
    }
    function multiChance(...list){
        if(list.length === 0){
            return [];
        }
        if(list.length === 1){
            return list[0];
        }
        if(list.length > 2){
            let left = list.splice(0, 2);
            let resLeft = multiChance(...left);
            let toCal = [resLeft];
            toCal.push(...list);
            return multiChance(...toCal);
        }
        if(list.length === 2){
            let l1 = list[0];
            let l2 = list[1];
            let res = [];
            for(let i = 0; i < l1.length; ++i){
                for(let j = 0; j < l2.length; ++j){
                    res.push(l1[i] + l2[j]);
                }
            }
            return res;
        }
    }
};