把数字翻译成字符串

把数字翻译成字符串

题目描述:给定一个数字,我们按照如下规则把它翻译为字符串:

0 翻译成 a,1 翻译成 b,……,11 翻译成 l,……,25 翻译成 z

一个数字可能有多个翻译。

例如 12258 有 5 种不同的翻译,它们分别是 bccfibwfibczimcfimzi

请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。

样例

输入:"12258"

输出:5

分析:根据我们将要处理的那个字符(第i个字符,记为x)的处理方式分情况讨论,类似对最后一步操作做分情况讨论

1、如果我们将x单独翻译 那么dp[i]=dp[i-1]

2、如果我们将x和前一字符合并翻译处理 那么dp[i] = dp[i-2]

因为题意要求的是翻译方案总数:所以

dp[i] = dp[i-1] + dp[i-2]

附:该题类似于爬楼梯问题、斐波那契......


代码如下:

class Solution {
public:
   int getTranslationCount(string s) {
       int dp[s.size()];
       if(s.size() == 0 || s.size() == 1) return s.size();
       s = " " + s;
       dp[0] = 1;
       for(int i=1;i<s.size();i++){
           dp[i] = dp[i-1];
           if(i > 1){
               int t = ( s[i] - '0' )  + ( s[i-1] - '0' ) * 10;
               if(t >= 10 && t <= 25) dp[i] += dp[i-2];
          }
      }
       return dp[s.size()-1];
  }
};

 

posted @ 2021-11-28 21:03  how_you_make_me_feel  阅读(27)  评论(0编辑  收藏  举报