持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
给定一个仅包含数字 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 <= 4digits[i]是范围['2', '9']的一个数字。
解题思路
本题主体的解题思路很简单,遍历输入字符串,获取所有的字母,返回这些字母的所有组合即可。
整体解题思路如下:
- 因为输入字符串(digits)的长度可能为
0,所以首先特判如果digits为假,直接返回[]; - 初始化数组
arr存放数组对应的字母数组,初始化结果数组res = [],初始化数字到字母的映射表numToChars; - 遍历输入字符串,将数字对应字母数组
push到arr中; - 取
arr[0]为初始结果,遍历arr中的每一个子数组,和结果数组中的每一项组成新的组合; - 最后返回结果数组即可。
代码实现
var letterCombinations = function(digits) {
if(!digits){
return []
}
const arr = []
let res = []
const numToChars = {
'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']
}
for(let i = 0;i<digits.length;i++){
arr.push(numToChars[digits[i]])
}
res = arr[0]
arr.shift()
while(arr.length){
const processArr = []
for(let i = 0;i<arr[0].length;i++){
for(let j = 0;j<res.length;j++){
processArr.push(res[j]+arr[0][i])
}
}
arr.shift()
res = processArr
}
return res
}
至此我们就完成了 leetcode-17-电话号码的字母组合
如有任何问题或建议,欢迎留言讨论!