面试题:给定一个的电话号码,问生成的所有字母组合(容易记的电话号码)

题目: 有时候大家会很奇怪,为啥电话的键盘上会有ABC...这样的字母,尤其是在手机诞生之前就已经存在了。其实这些字母除了再发短信时有用,还有另一个作用是使电话号码容易记忆,这在美国比较的流行,比如拨打310-GINO便可向GINO订购比萨,其中GINO对应的就是4466。GINO_PIZZA

哈,好玩吧。现在问题是这样的给定一个电话号码,比如123-4567或12345678,问其所有的字母组合。

比如:给定23,所有组合就是ad, ae, af, bd, be, bf, cd, ce, cf。

571px-Telephone-keypad2.svg

解答:

自己写了个递归实现。

大体思想是:

1. 建一个Mapping表,用于查找数字对应的字符。

2. 如果是一个数字,返回所有可能性的组合。

3. 如果多个数字,返回最后一个数字对应的组合跟前面已生产的字符串进行组合(笛卡尔乘积)

我的递归实现

等有时间写个非递归实现。

posted @ 2009-02-18 18:33  David (Dawei) Li  阅读(575)  评论(0编辑  收藏  举报