题目:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
提示:
0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字。
解题思路:
1.这道题本质上是回溯中的组合问题的升级版,当点击数字按钮时,字母有多种可能性,因此可以创建一个映射关系,来映射数字和代表的字母的关系。
2.递归的终止条件就是当结果的数组长度等于输入的数字字符的长度,因为一个数字代表了一个可能字符,因此长度相等时就说明找到了一个可能结果。
3.对获取到的每个结果进行转换,转换成字符串的形式。
代码:
var letterCombinations = function(digits) {
const obj = {
'2':'abc',
'3':'def',
'4':'ghi',
'5':'jkl',
'6':'mno',
'7':'pqrs',
'8':'tuv',
'9':'wxyz'
}
let res = [] , path = []
if(digits.length == 0) {
return res
}
backTracking(0)
return res.map(item=>item.join(''))
function backTracking(startIndex) {
if(path.length == digits.length) {
res.push(Array.from(path))
return
}
let digit = digits[startIndex]
let str = obj[digit]
for(let i = 0 ; i < str.length ; i++) {
path.push(str[i])
backTracking(startIndex+1)
path.pop()
}
}
};