剑指offer T46把数字翻译成字符串
case1思想:递归
每次可以做两种选,一次仅翻译1位,或者一次翻译两位(要求这两位表示的数在0-25之间)
class Solution {
//没有返回值int count = 0;public void helper(String num,int start){if(start==num.length()){count++;return;}//做选择//每次只翻译1位helper(num,start+1);//每次翻译两位//注意这里02不能算做一个两位数if(start<num.length()-1&&num.charAt(start)!='0'&&((num.charAt(start)-'0')*10+(num.charAt(start+1)-'0'))<=25){helper(num,start+2);}}public int translateNum(int num) {if(num<0) return 0;if(num<9) return 1; String s =String.valueOf(num); helper(s,0);return count;}
}
class Solution {
//带返回值类型public int helper(String num,int start){if(start==num.length()){return 1;}//做选择//每次只翻译1位int count = helper(num,start+1);//每次翻译两位if(start<num.length()-1&&num.charAt(start)!='0'&&((num.charAt(start)-'0')*10+(num.charAt(start+1)-'0'))<=25){return count+helper(num,start+2);}return count;}public int translateNum(int num) {if(num<0) return 0;if(num<9) return 1; String s =String.valueOf(num); return helper(s,0);}
}
case2:
采用DP思想:跟爬楼梯很像,一次要么爬1阶(翻译1位),要么爬两阶(翻译两位)只不过这里不是无条件爬两阶而已
dp[i] = dp[i-1]+dp[i-2]
dp[i]表示从第0位开始每次翻译1位或两位的方式翻译完到第i位的方法数
class Solution {public int translateNum(int num) { if(num<9) return 1;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++){if(s.charAt(i-2)!='0'&&((s.charAt(i-2)-'0')*10+(s.charAt(i-1)-'0'))<=25){dp[i] = dp[i-1]+dp[i-2];}else{dp[i] = dp[i-1];}}return dp[s.length()];}
}
class Solution {/*dp[i] = dp[i-1]+dp[i-2]dp[i]表示,从第0位开始每次翻译1位或两位的方式翻译完到第i位的方法数*/public int translateNum(int num) { if(num<9) return 1;String s = String.valueOf(num);int i_1 = 1;int i_2 = 1;for(int i=2;i<=s.length();i++){if(s.charAt(i-2)!='0'&&((s.charAt(i-2)-'0')*10+(s.charAt(i-1)-'0'))<=25){int temp = i_1;i_1+=i_2;i_2 = temp;}else{i_2 = i_1;}}return i_1;}
}
剑指offer T46把数字翻译成字符串相关推荐
- 【LeetCode】剑指 Offer 46. 把数字翻译成字符串
[LeetCode]剑指 Offer 46. 把数字翻译成字符串 文章目录 [LeetCode]剑指 Offer 46. 把数字翻译成字符串 package offer;public class So ...
- 【算法】剑指 Offer 46. 把数字翻译成字符串
1.概述 剑指 Offer 46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻 ...
- 剑指 Offer 46. 把数字翻译成字符串(动态规划+回溯+递归 解法)
剑指 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 ...
- 126. Leetcode 剑指 Offer 46. 把数字翻译成字符串 (动态规划- 字符串系列)
class Solution:def translateNum(self, num: int) -> int:nums = str(num)n = len(nums)#异常情况if n < ...
最新文章
- ERP与EWM集成配置-ERP端组织架构(二)
- 2018-2020年Gartner战略科技发展趋势一览!
- AI也会查水表啦!德国小哥开发水表读取器,可OTA升级,成本不到80元
- 指定开始_@高坪人,熏腊肉开始啦!指定地点仅限这9个地方,别走错啦
- 第一季4:Hi3518E_SDK_Vx.x.x.x的SDK目录结构
- TypeScript入门教程 之 枚举 Enums
- Java 异步回调机制实例解析
- 基于spring+quartz的分布式定时任务框架
- 实现树状图_举个栗子!Tableau 技巧(132):用参数操作实现数据下钻
- 关于安装NTKO Office插件的方法
- openwrt - transmission
- PostgreSQL系列- 3- 客户端工具
- 计算机为什么老是重启,为什么电脑开机后总是自动重启?电脑开机后自动重启怎么办?...
- win32gui恢复小化窗口,前置窗口
- python中int函数_int()函数以及Python中的示例
- 阿里云服务器是干什么用的?
- cocos2dx 3.1.1中EaseRateAction动作类的变化
- OIM Training Lab 1
- ajax实现文件下载
- 周末了,围观知乎福利话题,放松一下