leetcode 剑指 Offer 46. 把数字翻译成字符串
剑指 Offer 46. 把数字翻译成字符串
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
提示:
0 <= num < 231
思路
思路参考: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/
1 class Solution {2 public int translateNum(int num) {3 4 // 为方便索引,把num转换成字符串5 String str = String.valueOf(num);6 int len = str.length();7 int[] dp = new int[len+1];8 9 dp[0] = 1;
10 dp[1] = 1;
11 for(int i = 2; i <= len; i++){
12 String tmp = str.substring(i-2, i);
13 if(tmp.compareTo("10") >= 0 && tmp.compareTo("25") <= 0){
14 dp[i] = dp[i-1] + dp[i-2];
15 }else{
16 dp[i] = dp[i-1];
17 }
18 }
19 return dp[len];
20 }
21 }
leetcode执行用时:0 ms > 100.00%, 内存消耗:35.8 MB > 8.40%
复杂度分析:
时间复杂度:把数字num的每一位都遍历了一遍,所以时间复杂度为O(n)
空间复杂度:把数字转换成了字符串,需要一个O(n)的空间,另外还需要一个dp数组,所以一共需要O(2n)的空间
改进-空间优化
发现其实每个dp[i]只和dp[i-1] 和 dp[i-2]有关,所以只需要两个局部变量不断迭代即可,可以省去dp数组的空间复杂度
1 class Solution {2 public int translateNum(int num) {3 4 // 为方便索引,把num转换成字符串5 String str = String.valueOf(num);6 int len = str.length();7 // int[] dp = new int[len+1];8 9 int a = 1;
10 int b = 1;
11 int res = 0;
12 for(int i = 2; i <= len; i++){
13 String tmp = str.substring(i-2, i);
14 if(tmp.compareTo("10") >= 0 && tmp.compareTo("25") <= 0){
15 res = a + b;
16 }else{
17 res = a;
18 }
19 b = a;
20 a = res;
21 }
22 return a;
23 }
24 }
leetcode执行用时:0 ms > 100.00%, 内存消耗:35.6 MB > 55.83%
复杂度分析:
时间复杂度:把数字num的每一位都遍历了一遍,所以时间复杂度为O(n)
空间复杂度:把数字转换成了字符串,需要一个O(n)的空间,所以一共需要O(n)的空间
leetcode 剑指 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. 把数字翻译成字符串(动态规划+回溯+递归 解法)
剑指 Offer 46. 把数字翻译成字符串 问题描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻 ...
- 【算法】剑指 Offer 46. 把数字翻译成字符串
1.概述 剑指 Offer 46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻 ...
- 【LeetCode笔记】剑指 Offer 46. 把数字翻译成字符串(Java、字符串、动态规划、DFS)
文章目录 题目描述 思路 && 代码 1. 动态规划做法 2. DFS 做法 二刷 打卡第六天~继续加油! 题目描述 万物皆可爬楼梯.-和爬楼梯原理很像,都是使用动态规划的做法来做~ ...
- Leetcode刷题笔记——剑指 Offer 46. 把数字翻译成字符串(中等)
文章目录 题目描述 解法:动态规划 方法一:字符串遍历 复杂度分析 C++代码实现 方法二:数字求余 复杂度分析 C++代码实现 参考链接 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 ...
- 剑指 Offer 46. 把数字翻译成字符串
题目描述: 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l",--,25 ...
- 【千字分析】剑指 Offer 46. 把数字翻译成字符串
我是小张同学,立志用更简洁的代码做更高效的表达 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 & ...
- 【剑指 Offer 46. 把数字翻译成字符串】【剑指 Offer 10- II. 青蛙跳台阶问题】【198. 打家劫舍】【动态规划】
青蛙跳台阶,打家劫舍,字母相同编码三道题思路总结 总结我自己思路的,写的不详细,想看详细的可以跳转到我加的链接,都是力扣上同一个人写的题解,很厉害. 字符串翻译数字 字符串翻译数字 当最后一位数字单独 ...
最新文章
- 从0搭建一个Springboot+vue前后端分离项目(八)把数据从后台传到前端进行展示渲染,完善增删改查
- Dockerfile指令详解: CMD 容器启动命令
- 【客户下单】前端系统Action数据封装
- 开发Teams的messaging extension
- 上学帮:阿里云助力教育资讯平台防爬虫
- linux13位时间戳,Kotlin 处理Linux时间戳
- BZOJ 4520: [Cqoi2016]K远点对
- MYSQL 开发技巧
- MYISAM表的.frm、MYI损坏,丢失的修复方法
- C#中用ToString方法格式化时间
- [Tips]git cannot lock ref
- freebasic 编译linux,FreeBasic(basic语言编译器)0.90.1官网版
- 关于一些常见的矢量格式图(SVG,EPS,wmf,emf)
- SC-02-04-外包软件开发SOW工作说明书
- 利用R语言进行具有周期性的时间序列分析
- 独家| 阿里腾讯大裁员!一鲸落,万物生,一切才刚刚开始
- Vue进阶(幺捌零):Vue优质开源项目汇总(持续更新中...)
- 总结DH密钥协商(会话密钥)
- HTML 前端设置浏览器页签图标设置
- 看不见的竞争 之 把握意见领袖