1.把数字翻译成字符串
0-25分别表示a-z,给一个数字看有几种翻译方法,例如12258可以翻译为bccfi,bwfi,bczi,mcfi,mzi.
思路:可以想到利用递归解决问题,但递归可能会出现重复计算的问题,为了避免重复计算,我们从右到左进行计算不同翻译的数目。以12258为例,首先计算c4,易见得1;然后计算c3,因为58不符合区间要求,因此c3=1;计算c2,25符合区间要求,因此c2=1+1=2;计算c1,22也符合区间要求,c1=2+1=3;计算c0,12符合要求,c0=3+2=5.

    int GetTranslationCount(int number)
    {
        if(number<0)
        {
            return 0;
        }
        string numberInstring=to_string(number);//现将数字转换成字符串
        return GetTranslationCount(numberInstring);
    }
    int GetTranslationCount(const string& number)
    {
        int length=number.length();
        int *counts=new int[length];
        int count=0;
        for(int i=length-1;i>=0;--i)//从数字末尾开始,从右到左翻译并计算不同翻译的数目
        {
            count=0;
            if(i<length-1)
            {
                count=counts[i+1];
            }
            else
            {
                count=1;//最后一位肯定只有一种选择
            }
            if(i<length-1)
            {
                int digit1=number[i]-'0';
                int digit2=number[i+1]-'0';
                int counverted=digit1*10+digit2;
                if(counverted>=10&&counverted<=25)
                {
                    if(i<length-2)
                    count+=counts[i+2];//如果是倒数第三往左的数,就等于count[i+1]+count[i+2]
                    else
                    count+=1;//是倒数第二,只能+1
                }
            }
            counts[i]=count;
        }
        count=counts[0];
        delete[] counts;
        return count;
    }