思路:题目要求所有字母组合,由此联想到使用搜索算法,常见的搜索有深搜和广搜,深搜利用递归,广搜一般需要一个队列辅助。本题我采用的是深搜,digits的长度即是搜索的深度,里用hash表将数字与字母的映射存储起来,通过递归遍历每一个节点,具体代码如下:
var letterCombinations = function(digits) {
if(digits.length == 0){
return []
}
let map = {
2:'abc',
3:'def',
4:'ghi',
5:'jkl',
6:'mno',
7:'pqrs',
8:'tuv',
9:'wxyz'
}
let res = []
const dfs = (curStr,i)=>{
//递归结束条件,到达最深的节点
if(i > digits.length - 1){
res.push(curStr)
return
}
let leters = map[digits[i]]
for(let leter of leters){
//curStr+leter记录结果,i+1使深度加一
dfs(curStr+leter,i+1)
}
}
dfs('',0)
return res
};
本题还可使用广搜,时间复杂度是一样的。