电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
分析题目以及数据
由图可知,数据是一个向下扩展的,由此联想使用递归函数
代码
const phoneNumAndEng = (digits) => {
// 由示例2可知: 如果传入的参数是空字符串,返回 []
if (!digits.length) {
return [];
}
// 需要知道不同数字对应的字母,那么就需要一个映射表来映射数字对应的字母字符串
const map = {
2: "abc",
3: "def",
4: "ghi",
5: "jkl",
6: "mno",
7: "pqrs",
8: "tuv",
9: "wxyz",
};
// 从题目可知道最后的结果是一个数组,所以先定义一个空数组
let res = [];
// 分析题目可知,这是一个递归结构,所以需要一个递归函数
let ope = (cur, start) => {
// 如果查找的位置大于或者等于 digits 的长度,就结束本次递归,并将本次递归结果保存到 res 数组中
if (start >= digits.length) {
res.push(cur);
return;
}
// 查找数字对应的字母字符串
let str = map[digits[start]];
for (let i = 0; i < str.length; i++) {
// 递归调用
ope(cur + str[i], start + 1);
}
};
ope("", 0); // 开始调用递归函数
return res;
};
console.log(phoneNumAndEng("234"));