算法 电话号码的字母组合
题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
思路
- 当长度为
0
时,返回[]
- 创建映射关系
- res为最后结果数组,path为路径数组,path数组拼接会形成res中的一个元素
- 通过递归的形式,不断寻找下一个字母
- 如果path数组的长度达到所需的长度就将其转为字符串,存入res中,并将path清空
代码
/**
* @param {string} digits
* @return {string[]}
*/
var letterCombinations = function(digits) {
if(digits.length === 0) return []
const dir = {
'1':[],
'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.length === 1) return dir[digits]
let res = []
let path = []
backtracking(digits,digits.length,0)
return res
/**
* n 传入的数字字符串
* k 字符串所需长度
* a 记录 传入字符串的下标
*/
function backtracking(n,k,a){
// 如果达到所需长度就放入res中
if(path.length === k){
res.push(path.join(""))
return
}
for(const v of dir[n[a]]){
path.push(v)
// 寻找下一个字母
backtracking(n,k,a+1)
// 传入到res后就将path清空
path.pop()
}
}
};