0
点赞
收藏
分享

微信扫一扫

【LeetCode 17】电话号码的字母组合


目录

  • ​​题目​​
  • ​​示例​​
  • ​​解题思路​​
  • ​​代码​​
  • ​​遇到的问题​​
  • ​​提交结果​​

题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

【LeetCode 17】电话号码的字母组合_数组

示例

输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

解题思路

  1. 建立电话号码与字母的映射,并保存在数组中,数组的索引与字母对应的数字相等
  2. 将输入的数字进行分隔
  3. 将数字对应的字母储存在数组中
  4. 判断输入的数字是否为空、是否只有一个数字
  5. 先将前两个数字对应的字母进行组合,如果还有更多的数字,就将前数组前两项替换成上面的组合结果,在进行递归操作
  6. 最后数组只剩下一项,返回数组的第一项
  7. 执行该函数,返回最后的结果

代码

/**
* @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);
};

遇到的问题

开始报了​​Uncaught TypeError: Cannot read property 'length' of undefined​​​ 的错误,后来发现是因为没判断输入的数字是否为空,就若输入的数字为​​null​​,那在遍历的时候就会报这个错误。

提交结果

【LeetCode 17】电话号码的字母组合_git_02


举报

相关推荐

0 条评论