1. 题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例
输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
2. 解题思路
- 建立电话号码与字母的映射,并保存在数组中,数组的索引与字母对应的数字相等
- 将输入的数字进行分隔
- 将数字对应的字母储存在数组中
- 判断输入的数字是否为空、是否只有一个数字
- 先将前两个数字对应的字母进行组合,如果还有更多的数字,就将前数组前两项替换成上面的组合结果,在进行递归操作
- 最后数组只剩下一项,返回数组的第一项
-
3. 代码实现
/*** @param {string} digits* @return {string[]}*/var letterCombinations = function (digits) {var map = ['', 1, 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'];var num = digits.split('');var code = [];num.forEach(item => {if (map[item]) {code.push(map[item]);}})if (digits === '') {return [];}if (code.length === 1) {var result = [];for (var i = 0, length0 = code[0].length; i < length0; i++) {result.push(code[0][i]);}return result;}var fn = (digits) => {var result = [];for (var i = 0, length1 = digits[0].length; i < length1; i++) {for (var j = 0, length2 = digits[1].length; j < length2; j++) {result.push(`${digits[0][i]}${digits[1][j]}`);}}digits.splice(0, 2, result);if (digits.length > 1) {fn(digits)} else {return result;}return digits[0];}return fn(code);};
4. 提交结果

