【发布时间】:2021-06-14 07:25:10
【问题描述】:
我们有一个看起来像这样的数字字母图
const digitsLetters = new Map([
["2", ['a', 'b', 'c']],
["3", ['d', 'e', 'f']],
["4", ['g', 'h', 'i']],
["5", ['j', 'k', 'l']],
["6", ['m', 'n', 'o']],
["7", ['p', 'q', 'r', 's']],
["8", ['t', 'u', 'v']],
["9", ['w', 'x', 'y', 'z']],
]);
问题要求我们返回数字可以代表的所有可能的字母组合。例如,如果我们有"23",那么第一个数字2 映射到['a', 'b', 'c'],第二个数字映射到['d', 'e', 'f'],我们最终得到["ad","ae","af","bd","be","bf","cd","ce","cf"]。
我找到了一种在两个数组之间产生这种组合的方法。
// this will output ["ad","ae","af","bd","be","bf","cd","ce","cf"]
['a', 'b', 'c'].map(char1 => ['d', 'e', 'f'].map(char2 => char1 + char2)).flat(2)
所以我想我可以递归地将此算法应用于这样的数字,直到我找到最后一个。我认为这是可行的。但是,我很难实施该解决方案。有人可以帮我吗?
【问题讨论】:
-
是的,可以使用递归。我建议将
maps 扁平化为for循环,然后看看您是否可以从那里弄清楚如何创建递归公式。我认为这可能会让你更清楚。
标签: javascript algorithm recursion