从电话映射中列出有效单词

4

最近我参加了一次面试,面试官问了一个问题:给定一个有效单词列表和一个数字到字母的映射 - 类似于 1->ABC, 2->DEF - 我该如何编写一个函数来返回一个有效字符串列表。我遇到了很大的困难,希望能得到指导。

function validWords(digits, listOfValidWords) {

}

// for example
var dictionary = [//some list of words];
var words = validWords("1456", dictionary)

1456是一个数字还是四个独立的数字,或者这些数字的任何组合都可以成为结果?比如1、4、5、6、14、15、16等。 - Observer
1
一个正则表达式可能是最简单的... 1456 可以映射到 /[abc][jkl][mno][pqrs]/,然后只需遍历列表查找匹配项。 - Brian
可能是如何在JavaScript中将字母转换为数字?的重复问题。 - ideaboxer
这是C语言的代码 ;) http://stevehanov.ca/blog/index.php?id=9 - mplungjan
我想指出的是,面试官正在寻找你解决问题的能力。他们不仅仅希望你能简单地复制已有的代码。你需要从给定的业务案例出发,将问题分解为其技术组成部分。你需要能够识别所要求的常见模式等。确保你不仅了解解决方案,还要了解到达解决方案的路径。 - JamieSee
显示剩余3条评论
1个回答

4
您可以使用组合算法。

var dictionary = { 2: 'abc', 3: 'def', 4: 'ghi', 5: 'jkl', 6: 'mno', 7: 'pqrs', 8: 'tuv', 9: 'wxyz' },
    number = '345',
    result = [...number]
        .map(n => [...dictionary[n]])
        .reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => v + w)), []));
        
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


感谢您提供的好方案(函数式方法)。 - ideaboxer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接