题目要求:
给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”...25翻译成“z”。一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi。实现一个函数,用来计算一个数字有多少种不同的翻译方法。

解题思路:
下面我们从自上而下和自下而上两种角度分析这道题目,以12258为例:

自上而下,从最大的问题开始,递归 :12258/       \b+2258       m+258/   \         /   \bc+258 bw+58  mc+58  mz+8/  \      \        \     \bcc+58 bcz+8   bwf+8   mcf+8  mzi/        \       \     \bccf+8        bczi    bwfi   mcfi/bccfi
有很多子问题被多次计算,比如258被翻译成几种这个子问题就被计算了两次。自下而上,动态规划,从最小的问题开始 :
f(r)表示以r为开始(r最小取0)到最右端所组成的数字能够翻译成字符串的种数。对于长度为n的数字,f(n)=0,f(n-1)=1,求f(0)。
递推公式为 f(r-2) = f(r-1)+g(r-2,r-1)*f(r);
其中,如果r-2,r-1能够翻译成字符,则g(r-2,r-1)=1,否则为0。
因此,对于12258:
f(5) = 0
f(4) = 1
f(3) = f(4)+0 = 1
f(2) = f(3)+f(4) = 2
f(1) = f(2)+f(3) = 3
f(0) = f(1)+f(2) = 5

public class P231_TranslateNumbersToStrings {
    public static int getTranslationCount(int number){
        if(number<0)
            return 0;
        if(number==1)
            return 1;
        return getTranslationCount(Integer.toString(number));
    }
    //动态规划,从右到左计算。
    //f(r-2) = f(r-1)+g(r-2,r-1)*f(r);
    //如果r-2,r-1能够翻译成字符,则g(r-2,r-1)=1,否则为0
    public static int getTranslationCount(String number) {
        int f1 = 0,f2 = 1,g = 0;
        int temp;
        for(int i=number.length()-2;i>=0;i--){
            if(Integer.parseInt(number.charAt(i)+""+number.charAt(i+1))<26)
                g = 1;
            else
                g = 0;
            temp = f2;
            f2 = f2+g*f1;
            f1 = temp;
        }
        return f2;
    }
    public static void main(String[] args){
        System.out.println(getTranslationCount(-10));  //0
        System.out.println(getTranslationCount(1234));  //3
        System.out.println(getTranslationCount(12258)); //5
    }
}

链接:https://www.jianshu.com/p/80e1841909b7

把数字翻译成字符串(递归,动态规划)相关推荐

  1. 剑指 Offer 46. 把数字翻译成字符串(动态规划+回溯+递归 解法)

    剑指 Offer 46. 把数字翻译成字符串 问题描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻 ...

  2. [剑指offer][JAVA]面试题第[46]题[把数字翻译成字符串][递归][逆推]

    [问题描述][中等] 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l", ...

  3. 剑指 Offer 46. 把数字翻译成字符串(动态规划)(和青蛙跳台阶相似)

    (这个0的情况是用来递归的 真正输入只有0个的时候输出是0->看代码) class Solution {public:int translateNum(int num) {string str ...

  4. 【LeetCode 剑指offer刷题】动态规划与贪婪法题3:剑指Offer-46:把数字翻译成字符串

    给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成"a",1翻译成"b",--,11翻译成"1",--,25翻译成"z&qu ...

  5. 动态规划之青蛙跳台阶的应用(把数字翻译成字符串)

    剑指 Offer 46. 把数字翻译成字符串 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻 ...

  6. 【剑指Offer】个人学习笔记_46_把数字翻译成字符串

    目录 题目: [剑指 Offer 46. 把数字翻译成字符串](https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan- ...

  7. leetcode面试题46. 把数字翻译成字符串

    leetcode面试题46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:**0 翻译成 "a" ,1 翻译成 "b",--,11 翻译 ...

  8. leetcode-剑指 Offer 46. 把数字翻译成字符串

    leetcode-剑指 Offer 46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--, ...

  9. 把数字翻译成字符串/斐波那契数列/青蛙跳台阶

      今天做到剑指Offer中面试题46:把数字翻译成字符串,一看,这不是之前的斐波那契数列和青蛙跳台阶的翻版吗?遂记录一下解题思路. 题目:给定一个数字,我们按照如下规则把它翻译为字符串: 0 0 0 ...

  10. 【LeetCode】剑指 Offer 46. 把数字翻译成字符串

    [LeetCode]剑指 Offer 46. 把数字翻译成字符串 文章目录 [LeetCode]剑指 Offer 46. 把数字翻译成字符串 package offer;public class So ...

最新文章

  1. summary+plan
  2. 新手攻略熔炉_【新手攻略】快速入门
  3. So Easy! 让开发人员更轻松的工具和资源
  4. CSS仿艺龙首页鼠标移入图片放大
  5. 基于 HanLP 的 ES 中文分词插件
  6. 动态代理:jdk和cglib区别
  7. 管程理解及用管程实现生产者消费者问题
  8. Android 进程间通信——AIDL
  9. css3中transform-style的用法
  10. 数据结构-----环形链表
  11. 谨以此送给所有单身的MM
  12. DAMA-DMBOK 数据治理功能框架
  13. Fedora14源代码获取方法----直接到官网去下载
  14. 无奇不有,20款国外便携式智能手机充电器
  15. Android学习笔记——文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习
  16. 欧美游戏业者都挣多少钱
  17. python_面向对象编程
  18. java 日历计算农历和节假日的常用类(包括除夕的算法)
  19. openFeign夺命连环9问,这谁受得了?
  20. Web3 网络效应:五种心智模型

热门文章

  1. Obi Rope(Yanlz+Unity+柔性电缆+立钻哥哥+)
  2. 《UnityAPI.GameObject游戏对象》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+isStatic+SendMessage+Find+立钻哥哥++OK++)
  3. 蓝牙传输速率详细分析【针对蓝牙4.2]
  4. 应用之星破除行业门槛 零成本开发手机应用
  5. git push出现 remote: Support for password authentication was removed on August 13, 2021.
  6. 简单典型二阶系统_【文献选译】二阶弹性波动方程PML的简单实现
  7. 蚌埠学院计算机操作系统题库,蚌埠学院电子教务登录
  8. 服务器设置静态IP地址教程,在Ubuntu服务器18.04上设置静态IP地址
  9. Dell Latitude E6400找不到Broadcom USH及Contacted SmartCard驱动
  10. 度秘语音引擎app_语音引擎下载