publicinttranslateNum(int num){// 最初的dp[i-1]和dp[i-2]int res =1;int dp =1;// 个位上的值int ge = num %10;while(num !=0){
num /=10;// 十位上的值int shi = num %10;int i = shi *10+ ge;// dp[i]int current;if(i >=10&& i <=25){// 满足条件dp[i]= dp[i-1]+dp[i-2]
current = res + dp;}else{// 不满足条件dp[i]=dp[i-1]
current = res;}// 循环结束// dp[i-2]= dp[i-1]
dp = res;// dp[i-1] = dp[i]
res = current;// 个位= 十位
ge = shi;}// 最后的res就是dp[i]的值return res;}
go
functranslateNum(num int)int{// 最初的dp[i-1]和dp[i-2]和个位上的值
res, dp, ge :=1,1, num%10for num !=0{
num /=10// 十位上的值
shi := num %10
i := shi*10+ ge
// dp[i]var current intif i >=10&& i <=25{// 满足条件dp[i]= dp[i-1]+dp[i-2]
current = dp + res
}else{// 不满足条件dp[i]=dp[i-1]
current = res
}// 循环结束// dp[i-2]= dp[i-1]
dp = res
// dp[i-1] = dp[i]
res = current
// 个位= 十位
ge = shi
}// 最后的res就是dp[i]的值return res
}
题目链接思路示例:12258有5种不同的翻译,分别是"bccfi",“bwfi”,“bczi”, “mcfi"和"mzi”对于12258来说;1225可以是12+c+f也可以是12+z;动态规划:dp[i]以第i个数字结尾的当前数字串拥有之前的数字串的方法数如果相邻的两个数字组成大于等于10并且小于等于25的数;dp[i] = dp[i-1]+dp[i-2]如果相邻的两个数字组成小于10或者大于25的数;dp[i] = dp[i-1]java public int trans