「算法学习」:电话号码的字母组合
算法题目来源:力扣(LeetCode)给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。/*** @param {string} digits* @return {string[]}*/var letterCombinations = function(digits) {// 为空特殊
·
算法题目来源:力扣(LeetCode)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
/**
* @param {string} digits
* @return {string[]}
*/
var letterCombinations = function(digits) {
// 为空特殊处理
if (digits.length === 0) return [];
let numMap = new Map([
['0', ''],
['1', ''],
['2', 'abc'],
['3', 'def'],
['4', 'ghi'],
['5', 'jkl'],
['6', 'mno'],
['7', 'pqrs'],
['8', 'tuv'],
['9', 'wxyz']
])
let res = [];
dfs("", digits);
return res;
function dfs(str, digit) {
// 如果字符串为空了,将拼接好的字符加入数组
if (digit.length === 0) res.push(str);
else {
// 拿到字符串第一个字符,拿到其对应的数字
let numstr = numMap.get(digit[0]);
// 对可能性进行组合
for (let i = 0; i < numstr.length; i++) {
str += numstr[i];
// 递归组好的 str和下一段字符串
dfs(str, digit.slice(1))
// 回溯
str = str.slice(0, -1);
}
}
}
};
console.log(letterCombinations('34'))
// ["dg","dh","di","eg","eh","ei","fg","fh","fi"]
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)