题目描述

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

递归
一种直接是数字判断,或者换成字符串判断
易错点:还有一位时返回的是1,不是2,否则就重复了,如25

class Solution {
public:
    int translateNum(int num) {
        return Count(to_string(num));
    }
    int Count(string s) {
        int len=s.size();
        if(len==0||len==1) return 1;//len=0时返回1,因为len=2时,有两种可能 len(2)=len(1)+len(0)
        if("10"<=s.substr(len-2,2)&&s.substr(len-2,2)<="25")
        //这个范围的字符可以分成两个数字,可以合成一个数字
            return Count(s.substr(0,len-2))+Count(s.substr(0,len-1));
        else
            return Count(s.substr(0,len-1));
    }
};

数字:

class Solution {
public:
    int translateNum(int num) {
        return funcition(num);
    }
    int funcition(int num){
        if(num<10) return 1;
        if(num%100<=25&&num%100>=10)    
            return funcition(num/10)+funcition(num/100);
        else
            return funcition(num/10);
    }

};