none
编程的问题 RRS feed

  • 问题

  • 这个是作业……

    给定一串汉语拼音的字符串,按照手机输入的方式,翻译成相对应的数字。

    例如:nihao翻译成664442666

    相反,给定一串数字,翻译成字母,列出所有的可能

    例如:222翻译成aaa或ba或ab

    请高人指点一下……提示一下也行

    2010年10月8日 14:23

答案

  • 首先有个字母数字对照的map。

    字母翻数字比较简单直接映射就行了吧。

    数字翻字母因为涉及到组合问题,可以使用循环再递归的方法。不过这个方法效率不会很高。

    遍历映射表,从数字串的最前面开始找映射表的字母,然后剔除已匹配的数字进行递归。

     


    麻烦把正确答案设为解答。
    • 已标记为答案 mznxbcv 2010年10月12日 12:02
    2010年10月8日 16:11
    版主

全部回复

  • 首先有个字母数字对照的map。

    字母翻数字比较简单直接映射就行了吧。

    数字翻字母因为涉及到组合问题,可以使用循环再递归的方法。不过这个方法效率不会很高。

    遍历映射表,从数字串的最前面开始找映射表的字母,然后剔除已匹配的数字进行递归。

     


    麻烦把正确答案设为解答。
    • 已标记为答案 mznxbcv 2010年10月12日 12:02
    2010年10月8日 16:11
    版主
  • a => 2

    b => 22

    c => 222

    d => e

    ...

    w = 9

    x = 99

    y = 999

    z = 9999

    然后把相应的字母替换成表里面的数字就行了哈。当然你首先需要知道C++处理字符串的简单技巧。

    2010年10月12日 3:28
  • 至于数字到字母就比较囧了,你需要穷举所有可能,应该是一个广度优先搜索吧。不过其实做起来也是很容易的,就是你可能要多调试几次。

    举个例子,对于2223333

    首先表里面能够用的有2、22和222,因此变成

    a223333

    b23333

    c3333

    然后对于列表里面的每一个字符串的数字部分再进行一次,构造一个新的列表:

    aa23333

    ab3333

    ba3333

    cd333

    ce33

    cf3

    一直进行到构造出来的列表里面的所有字符串都没有数字为止。

    2010年10月12日 3:31
  • 谢谢啦~~~我花了好几个晚上才想到用二叉树加递归~~~嘿嘿
    2010年10月12日 12:04