长沙公积金网站怎么做异动,开发一款app需要多少钱?,济南网站排名推广,微信公众号创建小程序算法名称
电话号码的字符组合
算法描述
给定一个仅包含数字 2-9 的字符串#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下#xff08;与电话按键相同#xff09;。注意 1 不对应任何字母。 示例 1#xff1a; 输入…算法名称
电话号码的字符组合
算法描述
给定一个仅包含数字 2-9 的字符串返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下与电话按键相同。注意 1 不对应任何字母。 示例 1 输入digits “23” 输出[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”] 示例 2 输入digits “” 输出[] 示例 3 输入digits “2” 输出[“a”,“b”,“c”] 算法分析
数字和字母的映射 可以使用map或者定义一个二维数组例如string letterMap[10]来做映射我这里定义一个二维数组代码如下
const string letterMap[10] {, // 0, // 1abc, // 2def, // 3ghi, // 4jkl, // 5mno, // 6pqrs, // 7tuv, // 8wxyz, // 9
};用回溯法解决for循环 从下图中可以看出遍历的深度就是输入23的长度而叶子节点就是我们要收集的结果输出[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]。 算法解析代码
var letterCombinations function(digits) {//获取digits的长度const k digits.length;//使用mapconst map [,,abc,def,ghi,jkl,mno,pqrs,tuv,wxyz];//digits为空则输出[]if(!k) return [];//当digits只有一个数字则通过分割字符串的方式用map获得结果if(k 1) return map[digits].split();//定义函数function backtracking(n, k, a) {//当path的长度等于digits的长度则匹配完毕添加到res中if(path.length k) {res.push(path.join());return;}//对digits相对应的数字所包含的字母进行递归添加到path中for(const v of map[n[a]]) {path.push(v);//进行递归backtracking(n, k, a 1);path.pop();}}const res [], path [];//调用函数backtracking(digits, k, 0);//返回结果return res;
};
算法只有多写多练我们的算法逻辑和能力才能获得提高继续fighting✨✨✨ 期待获得你们的支持有更好的想法欢迎评论指出