给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
思路:
首先用动态规划,一个位置的字符,如果可以和前面的组成数字在10-25之间,那么就可以更新当前位置res为f1+f2 的和。然后往后走。如果不能组合 res=f2 .
【用了两个函数主要】string类的 substr(string开始的位置下标,取得长度)
,和 stoi 函数
代码:
class Solution {
//思路:将n换位string,然后逐位开始,利用 fn=fn-1 + fn-2 并且当n-1和n匹配为小于25的数才可,否则fn=fn-1;
public:
int translateNum(int n) {
if(n<10)
return 1;
else if(n<=25)
return 2;
string numStr=to_string(n);
int f1=1,f2=1;
if( stoi( numStr.substr(0,2) )<=25 && stoi(numStr.substr(0,2))>=10 )
f2=2;
int res=0;
for(int i=2; i<numStr.size(); ++i){
if( stoi(numStr.substr(i-1, 2) )<=25 &&stoi(numStr.substr(i-1,2) )>=10 )
res = f1+f2;
else {
res=f2;
}
f1=f2, f2=res;
}
return f2;
}
};