题目描述:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
输入:digits = ""
输出:[]
输入:digits = "2"
输出:["a","b","c"]
方法分析:
主要考察map、递归等
方法:
-
递归版本
var letterCombinations = function(digits) { const constract = [, , 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'] if (digits.length === 0) return [] if (digits.length === 1) return constract[digits[0]].split('') let result = constract[digits[0]].split('') let recursion = (i) => { if (!digits[i]) return result let cur = constract[digits[i]].split('') let newArr = [] for (let i = 0, len1 = result.length; i < len1; i++) { for (let j = 0, len2 = cur.length; j < len2; j++) { newArr.push(`${result[i]}${cur[j]}`) } } result = newArr return recursion(i + 1) } return recursion(1) }; -
map
let map = { 2: 'abc', 3: 'def', 4: 'ghi', 5: 'jkl', 6: 'mno', 7: 'pqrs', 8: 'tuv', 9: 'wxyz' }; let letterCombinations = function (digits) { let n = digits.length; call(0, n, digits, ''); }; let call = function (num, length, digits, str) { if (num === length) { console.log(str); return; } let tar = map[digits[num]] for (let i = 0; i < tar.length; i++) { call(num + 1, length, digits, str + tar[i]); } }
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情