动态规划:剑指 Offer 46. 把数字翻译成字符串
题目描述:
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。
一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

提示:
0 <= num < 231
解题思路:
根据题意,可按照下图的思路,总结出 “递推公式” (即转移方程)。
因此,此题可用动态规划解决,以下按照流程解题。


此题的动态规划计算是 对称的 ,即 从左向右 遍历(从第 dp[2] 计算至 dp[n] )和 从右向左 遍历(从第 dp[n−2] 计算至 dp[0] )所得方案数一致。

class Solution{ public int translateNum(int num){ int a=1,b=1,x,y=num%10;//初始化,状态定义 while (num!=0){ num/=10; x=num%10; int tmp = x*10+y; int c = (tmp>=10&&tmp<=25)?a+b:a;//状态转移方程 b=a; a=c; y=x; } return a;//返回值 } }
动态规划四部曲:
1.状态定义 2.状态转移 3.初始化 4.返回值

浙公网安备 33010602011771号