keep住呀
6.9
面试题46. 把数字翻译成字符串
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
1.递归法(没写对。。。)
这个是到达数组的尾部就算结束,所以返回1,算一种,如果sum大于10且小于25,那么就有两种情况,否则就一种。
class Solution {
public int translateNum(int num) {
String s=String.valueOf(num);
char[] c=s.toCharArray();
return countTranslateNum(c,0);
}
public int countTranslateNum(char[] c,int s)
{
if(s>=c.length-1)
{
return 1;
}
int sum=(c[s]-'0')*10+(c[s+1]-'0');
if(sum>=10&&sum<=25)
{
return countTranslateNum(c,s+2)+countTranslateNum(c,s+1);
}
else{
return countTranslateNum(c,s+1);
}
}
}
2.动态规划(想不到啊)
-
如果不能直接翻译 num_{i-2}num_{i-1} 这个两位数 :
dp[i]=dp[i-1] -
如果能直接翻译 num_{i-2}num_{i-1}
dp[i]=dp[i−2]+dp[i−1]