直接遍历不行,只能记录两个组合状态。跟青蛙跳台阶、斐波那契数列解法相似。参考:面试题46. 把数字翻译成字符串(动态规划,清晰图解)
动规
class Solution {
public:
//动规
//n:表示数字的长度,当前长度等于n-1加上n-2的长度
//递推方程:dp[n]=dp[n-1]+(rec[n]*10+rec[n-1])<=25?1:0; 高位到地位
int translateNum(int num) {
int a=1,b=1,l,r=num%10;
while(num){
num/=10;
l=num%10;
int tmp=((l*10+r)>=10&&(l*10+r)<=25)?a+b:a; //大于10是因为最后一个数字小于10会有影响
b=a;
a=tmp;
r=l;
}
return a;
}
};