剑指 Offer 46. 把数字翻译成字符串(动态规划+回溯+递归 解法)
剑指 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. 把数字翻译成字符串(动态规划+回溯+递归 解法)相关推荐
- 126. Leetcode 剑指 Offer 46. 把数字翻译成字符串 (动态规划- 字符串系列)
class Solution:def translateNum(self, num: int) -> int:nums = str(num)n = len(nums)#异常情况if n < ...
- 【LeetCode】剑指 Offer 46. 把数字翻译成字符串
[LeetCode]剑指 Offer 46. 把数字翻译成字符串 文章目录 [LeetCode]剑指 Offer 46. 把数字翻译成字符串 package offer;public class So ...
- 【算法】剑指 Offer 46. 把数字翻译成字符串
1.概述 剑指 Offer 46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻 ...
- leetcode 剑指 Offer 46. 把数字翻译成字符串
剑指 Offer 46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 &q ...
- 【千字分析】剑指 Offer 46. 把数字翻译成字符串
我是小张同学,立志用更简洁的代码做更高效的表达 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 & ...
- 【LeetCode笔记】剑指 Offer 46. 把数字翻译成字符串(Java、字符串、动态规划、DFS)
文章目录 题目描述 思路 && 代码 1. 动态规划做法 2. DFS 做法 二刷 打卡第六天~继续加油! 题目描述 万物皆可爬楼梯.-和爬楼梯原理很像,都是使用动态规划的做法来做~ ...
- 剑指 Offer 46. 把数字翻译成字符串
题目描述: 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l",--,25 ...
- Leetcode刷题笔记——剑指 Offer 46. 把数字翻译成字符串(中等)
文章目录 题目描述 解法:动态规划 方法一:字符串遍历 复杂度分析 C++代码实现 方法二:数字求余 复杂度分析 C++代码实现 参考链接 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 ...
- 【剑指 Offer 46. 把数字翻译成字符串】【剑指 Offer 10- II. 青蛙跳台阶问题】【198. 打家劫舍】【动态规划】
青蛙跳台阶,打家劫舍,字母相同编码三道题思路总结 总结我自己思路的,写的不详细,想看详细的可以跳转到我加的链接,都是力扣上同一个人写的题解,很厉害. 字符串翻译数字 字符串翻译数字 当最后一位数字单独 ...
最新文章
- ssh_config sshd_config 详解ssh_config sshd_config 详解
- 20172319 实验二《树》实验报告
- 今天感觉有点冷了其实。
- 08.Eclipse下Ndk开发(使用fmod实现QQ变声功能)
- 为什么要将表和索引建立在不同的表空间?
- linux虚拟地址被大量占用,《Linux中为什么要使用虚拟地址》
- 【bzoj4712】洪水
- 一行代码揭开CPU执行原理
- jquery中阻止事件冒泡的方法
- 好看的个人介绍引导页PHP源码
- 平方根的计算(二分逼近、牛顿拉普生法)
- java接口开发流程
- MongoDB之Robo3T客户端安装
- 【12c】直方图Histograms
- 【渝粤教育】国家开放大学2018年春季 8639-21T食品营养与健康 参考试题
- linux纯黑窗口,Win10 20H1命令提示符窗口引入全黑设计
- 当ChatGpt接入微信群之后。。。
- CN基于词库的中文转拼音优质解决方案,单类单文件版,支持低版本PHP
- Blender新手入门试水作品:Low poly版敲击兽
- (一)BST树(二叉搜索树)
热门文章
- 右下角自动弹出广告的删除
- ORACLE CREATE USER 命令
- chinaren校友录xss漏洞
- 【21岁扶墙当CTO】之无人机篇(1/n)
- Python中sympy库的使用方法(详细)
- 关于 ‘else‘ without a previous ‘if‘错误
- Sawyer协作机器人帮助金属加工企业提升生产力
- html一般资源放在那里,css一般放到哪里?
- Linux 常用服务搭建笔记(精简笔记)
- python外星人入侵游戏图片_[Python]简单的外星人入侵游戏