17. 电话号码的字母组合回溯Normal
Posted pre_eminent
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17. 电话号码的字母组合回溯Normal相关的知识,希望对你有一定的参考价值。
题目
难度中等
给定一个仅包含数字 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. 使用map记录数字与字母的映射关系
2. 按照 78题的回溯模板
3. 回溯函数使用参数startIndex
4. 回溯函数到达叶子节点时 将path添加到结果集res中后,return
5. 根据startIndex取出数字,再从map中获取对应的字母,即所有的选择
解答:
/**
* @param string str
* @return string[]
*/
var letterCombinations = function(str)
// 健壮性判断
if (str === "")
return [];
// 初始位置从0开始
let startIndex = 0;
// 存放结果集
let res = [];
// 策略树到叶节点时,添加到结果集
let path = [];
// 辅助map
let map = new Map();
map.set("2", "abc");
map.set("3", "def");
map.set("4", "ghi");
map.set("5", "jkl");
map.set("6", "mno");
map.set("7", "pqrs");
map.set("8", "tuv");
map.set("9", "wxyz");
backtrack(str, startIndex, path, res, map);
return res;
;
function backtrack(str, startIndex, path, res, map)
// 当到达叶结节时,添加到结果集
if (path.length === str.length)
res.push(path.join(''));
return;
// 找出"23"的第1个字符"2" 对应的字母"abc"
let ch = str[startIndex];
let choices = map.get(ch);
// 遍历所有选择
for (let i = 0; i < choices.length; i++)
let alpha = choices[i];
// 做出选择
path.push(alpha);
// 进入下一层
backtrack(str, startIndex + 1, path, res, map);
// 撤销选择
path.pop();
以上是关于17. 电话号码的字母组合回溯Normal的主要内容,如果未能解决你的问题,请参考以下文章