给定一个仅包含数字 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']
的一个数字。
方法一:dfs+回溯
时间复杂度:O(3^m+4^n),m和n分别是3个字母和4个字母对应的数字个数
空间复杂度:O(m+n)
1 /** 2 * @param {string} digits 3 * @return {string[]} 4 */ 5 var letterCombinations = function(digits) { 6 if (digits.length === 0) { 7 return []; 8 } 9 const res = []; 10 const map = { //建立电话号码和字母的映射关系 11 '2': 'abc', 12 '3': 'def', 13 '4': 'ghi', 14 '5': 'jkl', 15 '6': 'mno', 16 '7': 'pqrs', 17 '8': 'tuv', 18 '9': 'wxyz' 19 } 20 const dfs = (curStr, i) => { //curStr是递归每一层的字符串,i是扫描的指针 21 if (i > digits.length - 1) { //边界条件,递归的出口 22 res.push(curStr); //其中一个分支的解推入res 23 return; //结束递归分支,进入另一个分支 24 } 25 const letters = map[digits[i]]; //取出数字对应的字母 26 for (const letter of letters) { 27 //进入不同字母的分支 28 dfs(curStr + letter, i + 1) //参数传入新的字符串,i右移,继续递归 29 } 30 } 31 dfs('', 0); //递归入口,传入空字符串,i初始为0的位置 32 return res; 33 }
原文地址:http://www.cnblogs.com/icyyyy/p/16876753.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性