1. 程式人生 > >前端演算法: 電話號碼的字母組合

前端演算法: 電話號碼的字母組合

給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。

給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。
在這裡插入圖片描述

    示例:
    輸入:"23"
    輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
    說明:
    儘管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。
var letterCombinations = function(digits) {
    const mappings = {
        '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']
    };
    if (!digits || digits.length === 0) return [];
    if (digits.length === 1) {
        return mappings[digits];
    }
    let result = [];
    let set1 = letterCombinations(digits.substr(0, 1));
    let set2 = letterCombinations(digits.substr(1));
    for (let i = 0; i < set1.length; i++) {
        for (let j = 0; j < set2.length; j++) {
        result.push(set1[i] + set2[j]);
        }
    }
    return result;
    };
console.log(letterCombinations('23'))
var letterCombinations1 = function(digits) {
	var map = {
		"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"]
	};
	var rtn = map[digits[0]];
	digits = digits.substr(1);
	digits.split("").forEach(function(digit) {
		var t = [];
		map[digit].forEach(function(letter) {
			t = t.concat(rtn.map(function(item) {
				return item + letter;
			}));
		});
		rtn = t;
	});
	return rtn === undefined ? [] : rtn;
};
console.log(letterCombinations1('32'))