题目描述
给定一个数字,我们按照如下规则把它翻译为字符串: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); } };