内容简介:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。示例:
LeetCode 17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。
注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
这道题的难点主要就是首先你能将输入的号码对应的结果映射出来,最后通过递归的形式两两组合得出结果
let letterCombinations = (digits) => { if (digits.length == 0) return [] //为空 情况 let map = ['', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'] let arr = digits.split('') let resarr = arr.map(item => map[item]) if (resarr.length == 1) return resarr[0].split('')//仅输入一个 情况 let compute = (arr) => {//组合传入数组的前两项 ['ab','cd','ewe'] let temp = [] //['ac','ad','bc','bd'] // 将前两项组合结果放入临时数组中 for (let i = 0; i < arr[0].length; i++) { for (let j = 0; j < arr[1].length; j++) { temp.push(`${arr[0][i]}${arr[1][j]}`) } } // [['ac','ad','bc','bd'],'ewe'] arr.splice(0, 2, temp)//将原来的数组前两项结果用临时数组替换 if (arr.length > 1) { compute(arr) } return arr[0] } return compute(resarr) };
你也可以用这种哈希表的形式
let map = { //你也可以用这种哈希表的形式 '2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz', }
如果喜欢或者想要更多的信息, 可以戳这里 ,欢迎star
以上所述就是小编给大家介绍的《LeetCode-电话号码的字母组合(No.17) 递归+hash》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 无字母数字webshell之提高篇
- 无字母数字Webshell之提高篇
- 【LeetCode】贪心算法--划分字母区间(763)
- java – 如何按字母顺序排列哈希集?
- 立体字母建模教程【C4D教程】
- 浅析一个匹配数字和字母密码的正则表达式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++ Primer 中文版(第 5 版)
[美] Stanley B. Lippman、[美] Josée Lajoie、[美] Barbara E. Moo / 王刚、杨巨峰 / 电子工业出版社 / 2013-9-1 / CNY 128.00
这本久负盛名的 C++经典教程,时隔八年之久,终迎来史无前例的重大升级。除令全球无数程序员从中受益,甚至为之迷醉的——C++ 大师 Stanley B. Lippman 的丰富实践经验,C++标准委员会原负责人 Josée Lajoie 对C++标准的深入理解,以及C++ 先驱 Barbara E. Moo 在 C++教学方面的真知灼见外,更是基于全新的 C++11标准进行了全面而彻底的内容更新。......一起来看看 《C++ Primer 中文版(第 5 版)》 这本书的介绍吧!