【问题描述】[中等]

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"提示:0 <= num < 231

【解答思路】

1. 动态规划


1.1 字符串遍历


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

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()];}
}
class Solution {public int translateNum(int num) {char[] sc = String.valueOf(num).toCharArray();int n = sc.length;int[] f = new int[n + 1];f[0] = 1;for (int i = 1; i <= n; i++) {//if (sc[i - 1] >= '0' && sc[i - 1] <= '9') {f[i] += f[i - 1];//}if (i > 1) {int a = (sc[i - 2] - '0') * 10 + (sc[i - 1] - '0');if (a >= 10 && a <= 25) {f[i] += f[i - 2];}}}return f[n];}
}
1.2 数字求余(压缩空间)




时间复杂度:O(N) 空间复杂度:O(1)

class Solution {public int translateNum(int num) {int a = 1, b = 1, x, y = num % 10;while(num != 0) {num /= 10;x = num % 10;int tmp = 10 * x + y;int c = (tmp >= 10 && tmp <= 25) ? a + b : a;b = a;a = c;y = x;}return a;}
}
2. 逆推递归

递归出口是num是只有一位数,以xyzcba为例,先取最后两位(个位和十位)即ba,如果ba>=26,必然不能分解成f(xyzcb)+f(xyzc),此时只能分解成f(xyzcb);但还有一种情况,就是ba<=9,也就是该数十位上为0,此时也不能分解。代码如下:

时间复杂度:O(N^2) 空间复杂度:O(1)

class Solution {public int translateNum(int num) {if (num<=9) {return 1;}//xyzcbaint ba = num%100;if (ba<=9||ba>=26) {return translateNum(num/10);}else  {return translateNum(num/10)+translateNum(num/100);}}
}#### 【总结】
###### 1.从前往后 从后往前 由结果逆推
###### 2.细节
2.1 整形转字符串
String s = String.valueOf(num);
2.2整形转字符数组
char[] sc = String.valueOf(num).toCharArray();
###### 3. 动态规划流程
第 1 步:设计状态
第 2 步:状态转移方程
第 3 步:考虑初始化
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩转载链接: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/参考链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/solution/di-gui-qiu-jie-shuang-bai-by-xiang-shang-de-gua-ni/

[剑指offer][JAVA]面试题第[46]题[把数字翻译成字符串][递归][逆推]相关推荐

  1. [剑指offer][JAVA]面试题第[10-2]题[青蛙跳台阶问题][动态规划][递归]

    [问题描述][中等] 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法.答案需要取模 1e9+7(1000000007),如计算初始结果为:100000 ...

  2. [剑指offer][JAVA]面试题第[31]题[栈的压入、弹出序列][栈]

    [问题描述][中等] 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4 ...

  3. [剑指offer][JAVA]面试题第[39]题[数组中出现次数超过一半的数字][HashMap][摩尔投票法]

    [问题描述][简单] 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.你可以假设数组是非空的,并且给定的数组总是存在多数元素.示例 1:输入: [1, 2, 3, 2, 2, 2, 5, ...

  4. [剑指offer][JAVA]面试题第[32-3]题[从上到下打印二叉树 ][BFS]

    [问题描述][中等] 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3 ...

  5. [剑指offer][JAVA]面试题第[32-2]题[从上到下打印二叉树][BFS]

    [问题描述][简单] 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行.例如: 给定二叉树: [3,9,20,null,null,15,7],3/ \9 20/ \15 7 ...

  6. [剑指offer][JAVA]面试题第[32-1]题[从上到下打印二叉树][BFS]

    [问题描述][中等] 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回: ...

  7. [剑指offer][JAVA]面试题第[30]题[包含min函数的栈][双栈辅助栈][单栈]

    [问题描述][中等] 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1).示例:MinStack min ...

  8. [剑指offer][JAVA]面试题第[16]题[数值的整数次方][位运算][二分法]

    [问题描述][中等] 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题.示例 1:输入: ...

  9. [剑指offer][JAVA]面试题第[64]题[求1+2+…+n][逻辑运算符]

    [问题描述][中等] 求 1+2+...+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C).输入: n = 3 输出: 6 [解 ...

最新文章

  1. 题目 1471:【蓝桥杯】【入门题】【基础练习VIP】矩形面积交
  2. 「图文直播」CSDN 二十年,AI 赋能全新出发
  3. Linux系统日志级别
  4. 正则重温(学习笔记)
  5. git如何设置master分支的权限_Git 从master 分支拉新分支开发
  6. python读写文件代码_Python 读写文件的操作代码
  7. composer 检查镜像_检查N元树中的镜像
  8. 这份 Pandas 学习教程很不错,可在线运行
  9. php实验星星塔,简单编程(九)编程制作特殊图案 星星塔(3) 左右星星塔 for循环的嵌套编程...
  10. UVA 11825 Hackers' Crackdown 状态DP
  11. 173. Insertion Sort List【LintCode by java】
  12. 江苏省计算机二级c语言考试知识点,计算机二级考试C语言常考知识点归纳
  13. 适用于苹果Mac的 4 个好用的 CAD 软件
  14. python支持多种编程范式吗_理解真格量化的Python编程范式
  15. android谷歌地图删除marker,无法将marker从google地图上删除
  16. 电脑强制关机以后计算机无法启动,win10系统电脑强制关机后导致无法启动的教程...
  17. Ubuntu安装Burg
  18. Snagit_日文输入法:促音,长音,小写的输入方法
  19. Spark mlib KMeans聚类算法
  20. 计算机专业职业规划英语小作文,关于职业规划的英语作文带翻译

热门文章

  1. css--block formatting context
  2. 一段按页自动滚动文字或图片的Js代码
  3. Java String常用的数据类型转换
  4. 高德地图开发 怎么去除城市信息
  5. superagent返回结果乱码
  6. 从底层重学 Java 之 Stream 并行及标志 GitChat连接
  7. .Net DES加密解密(不带向量)
  8. 使用jquery图表插件jqplot之折线图
  9. html块左右排列,html – 如何均匀地排列多个内嵌块元素?
  10. 接口(定义,使用方法)