动态规划:剑指 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.返回值

 

posted @   ZDREAMER  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示