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

示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"

提示:

  • 0 <= num < 2^31

分析:

方法:动态规划

可以将一个数字令为 x1 · x2 · ... · xn-1 的形式,那么这个形式的翻译方式就为 F(n-1) 种,当在最后一位加上 xn 时,如果 xn-1 · xn 不是小写字母,那么 F(n) = F(n-1),如果 xn-1 · xn 是小写字母,去掉 xn-1 · xn 后数字的翻译方式就为 F(n-2),那么 F(n) = F(n-2) + F(n-1)。需要注意:xn-1 为 0 时, xn-1 · xn 不算小写字母,运行时候发现的。因此我们可以写出转移方程:

dp[i] =

  • dp[i-1]                            xi-1 * 10 + xi <= 0  ||  xi-1 * 10 + xi >= 26
  • dp[i-1] + dp[i-2]              0 < xi-1 * 10 + xi < 26

时间复杂度:O(n) 
空间复杂度:O(n)

class Solution {public int translateNum(int num) {//定义List集合记录每位数字List<Integer> list = new ArrayList<>();//遍历存储while(num > 0){list.add(num % 10);num /= 10;}//定义结果,上一结果,上一数字,辅助变量int sum = 1, pre_sum = 0, pre_num = 0, temp;//遍历,计算结果for(int i = list.size()-1; i > -1; --i){//计算与上一个数字组合的数字是否为字母temp = pre_num * 10 + list.get(i);if(pre_num != 0 && temp > 0 && temp < 26){//结果加上上一结果,上一结果变为当前结果temp = sum;sum += pre_sum;pre_sum = temp;}//不为字母,上一结果变为当前结果else{pre_sum = sum;}//将当前数字变为上一数字pre_num = list.get(i);}return sum;}
}

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof

JAVA练习89-把数字翻译成字符串相关推荐

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

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

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

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

  3. leetcode 剑指offer-46.把数字翻译成字符串

    原题如下: 剑指offer-46.把数字翻译成字符串 2020年6月9日 每日一题 题解 方法一: 当我们考虑单个数字的时候,就只有一种翻译的结果,重要的是,我们遇到连续两个字母也可以翻译成字母,那么 ...

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

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

  5. 【算法】剑指 Offer 46. 把数字翻译成字符串

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

  6. leetcode 题库46. 把数字翻译成字符串

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

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

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

  8. 剑指offer46. 把数字翻译成字符串

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

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

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

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

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

最新文章

  1. Python3破冰人工智能,你需要掌握一些数学方法
  2. UCLA教授遭到举报后被停课!原因竟是不同意学生主张的“考试放水”
  3. MairaDB 函数(一)
  4. luogu3233 世界树 (虚树)
  5. 苏州科技大学计算机学院 李双娴,苏州大学计算机科学与技术学院第十二次研究生代表大会顺利召开...
  6. HDU5923-Prediction-有继承味道的并查集
  7. html中如何在标题中加样式,html title属性 样式
  8. 《PHP对象、模式与实践》之对象
  9. python读取邮箱邮件_Python读取邮箱邮件
  10. List实现类的特点和性能分析
  11. 学习笔记_vnpy实战培训day01
  12. docker 容器和镜像的区别
  13. android 系统dialog的应用
  14. 什么是开源(Open Source)?
  15. Linux Interrupt——魅族内核大神文章
  16. OpenCV图像处理基础操作(3)
  17. wordpress主题模板开发制作教程
  18. 视频录制后有噪音怎么办?教你简答几步去除视频噪音!
  19. 用jQuery制作对联广告
  20. 美团开店宝Android pad,美团开店宝(com.sankuai.meituan.merchant) - 9.2.1 - 应用 - 酷安

热门文章

  1. Android 如何判断一个应用在运行(转)
  2. 英文单词词形还原程序
  3. 喜欢吃肉的进来学两手
  4. linux通过resolve配置dns,使用systemd-resolved在Fedora上通过TLS配置DNS的方法
  5. XSS攻击和跨站脚本安全漏洞防护
  6. 土地资源管理就业怎么这么难_【土地资源管理研究生就业怎么样,有发展么?】-看准网...
  7. 搭建MarkDown文档整理对外展示网站
  8. 文字一键转语音,配音不用愁,支持几十种男声女声!
  9. 网红“有毒”,被“感染”的短视频、直播平台真能赢得下半场?
  10. 怎么建立工程和源代码文件在VC++6.0 中