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

问题描述

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

示例 1:

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

提示:

0 <= num < 

解题思路

注意到num可能是,因此考虑使用字符串存储数字解决大数越界问题。并且是使用小写字母来代替数字,也就是26进制的转换。

第一种方式就是使用字符串存储之后,使用递归法来递归的判断当前位置上可能性是一种还是两种,满足条件就res++;最后输出res;

第二种方法就是进制转换常用的循环取余,取到每一位或是某两位。使用回溯来实现。

第三种方法就是使用动态规划来实现。

  • 状态定义: 设动态规划列表 dp,dp[i]代表以 第i个x为结尾的数字的翻译方案数量。
  • 转移方程: 若 第i个x 和 第i-1个x 组成的两位数字可以被翻译,则 dp[i]=dp[i−1]+dp[i−2];否则 dp[i]=dp[i−1]。可被翻译的两位数区间为 [10,25]。
  • 初始状态: dp[0]=dp[1]=1,即 “无数字” 和 “第 1位数字” 的翻译方法数量均为 1;
  • 返回值: dp[n],即此数字的翻译方案数量。

作者:jyd
链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/solution/mian-shi-ti-46-ba-shu-zi-fan-yi-cheng-zi-fu-chua-6/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Java解法

解法一:

class Solution {int res = 0;public int translateNum(int num) {String s = String.valueOf(num);helper(s,0);return res;}public void helper(String s,int ind){if(ind==s.length()) {res++;return;}helper(s,ind+1);if(ind+1<s.length() && Integer.parseInt(s.substring(ind,ind+2))>9 && Integer.parseInt(s.substring(ind,ind+2))<26){helper(s,ind+2);}}
}

解法二:

class Solution {public int translateNum(int num) {if(num==0 || num < 10) return 1;if(num%100<26 && num%100>9) return translateNum(num/10)+translateNum(num/100);else return translateNum(num/10);}
}

解法三:

class Solution {public int translateNum(int num) {String s = String.valueOf(num);int[] dp = new int[s.length()+1];dp[0] = 1;dp[1] = 1;for(int i = 2; i <= s.length(); i ++){String temp = s.substring(i-2, i);if(temp.compareTo("10") >= 0 && temp.compareTo("25") <= 0)dp[i] = dp[i-1] + dp[i-2];elsedp[i] = dp[i-1];}return dp[s.length()];}
}

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

  1. 126. Leetcode 剑指 Offer 46. 把数字翻译成字符串 (动态规划- 字符串系列)

    class Solution:def translateNum(self, num: int) -> int:nums = str(num)n = len(nums)#异常情况if n < ...

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

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

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

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

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

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

  5. 【千字分析】剑指 Offer 46. 把数字翻译成字符串

    我是小张同学,立志用更简洁的代码做更高效的表达 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 & ...

  6. 【LeetCode笔记】剑指 Offer 46. 把数字翻译成字符串(Java、字符串、动态规划、DFS)

    文章目录 题目描述 思路 && 代码 1. 动态规划做法 2. DFS 做法 二刷 打卡第六天~继续加油! 题目描述 万物皆可爬楼梯.-和爬楼梯原理很像,都是使用动态规划的做法来做~ ...

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

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

  8. Leetcode刷题笔记——剑指 Offer 46. 把数字翻译成字符串(中等)

    文章目录 题目描述 解法:动态规划 方法一:字符串遍历 复杂度分析 C++代码实现 方法二:数字求余 复杂度分析 C++代码实现 参考链接 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 ...

  9. 【剑指 Offer 46. 把数字翻译成字符串】【剑指 Offer 10- II. 青蛙跳台阶问题】【198. 打家劫舍】【动态规划】

    青蛙跳台阶,打家劫舍,字母相同编码三道题思路总结 总结我自己思路的,写的不详细,想看详细的可以跳转到我加的链接,都是力扣上同一个人写的题解,很厉害. 字符串翻译数字 字符串翻译数字 当最后一位数字单独 ...

最新文章

  1. ssh_config sshd_config 详解ssh_config sshd_config 详解
  2. 20172319 实验二《树》实验报告
  3. 今天感觉有点冷了其实。
  4. 08.Eclipse下Ndk开发(使用fmod实现QQ变声功能)
  5. 为什么要将表和索引建立在不同的表空间?
  6. linux虚拟地址被大量占用,《Linux中为什么要使用虚拟地址》
  7. 【bzoj4712】洪水
  8. 一行代码揭开CPU执行原理
  9. jquery中阻止事件冒泡的方法
  10. 好看的个人介绍引导页PHP源码
  11. 平方根的计算(二分逼近、牛顿拉普生法)
  12. java接口开发流程
  13. MongoDB之Robo3T客户端安装
  14. 【12c】直方图Histograms
  15. 【渝粤教育】国家开放大学2018年春季 8639-21T食品营养与健康 参考试题
  16. linux纯黑窗口,Win10 20H1命令提示符窗口引入全黑设计
  17. 当ChatGpt接入微信群之后。。。
  18. CN基于词库的中文转拼音优质解决方案,单类单文件版,支持低版本PHP
  19. Blender新手入门试水作品:Low poly版敲击兽
  20. (一)BST树(二叉搜索树)

热门文章

  1. 右下角自动弹出广告的删除
  2. ORACLE CREATE USER 命令
  3. chinaren校友录xss漏洞
  4. 【21岁扶墙当CTO】之无人机篇(1/n)
  5. Python中sympy库的使用方法(详细)
  6. 关于 ‘else‘ without a previous ‘if‘错误
  7. Sawyer协作机器人帮助金属加工企业提升生产力
  8. html一般资源放在那里,css一般放到哪里?
  9. Linux 常用服务搭建笔记(精简笔记)
  10. python外星人入侵游戏图片_[Python]简单的外星人入侵游戏