【问题描述】[中等]
给定一个数字,我们按照如下规则把它翻译为字符串: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/