难度:中等

    题目描述:
    给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

    示例:

    1. 输入: 12258
    2. 输出: 5
    3. 解释: 122585种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi""mzi"

    解题思路:
    1 如果数字中所有的连续两个数字组合起来都比25 要大, 说明只有一种翻译方法 比如 555 只能翻译成 f f f
    2 如果连续连个相邻数字组合成的数字比10 小, 说明这两个数字也只有一种翻译方法。 比如 501 只能翻译成 f a b
    3 当相邻的两个数字组合成的数字 10 <= num <= 25 时, dp[i] = dp[i-1] + dp[i-2] (i>1) dp[0] = 1; dp[1] = 2;

    1. var translateNum = function(num) {
    2. if (num == 0) return 1;
    3. let str = num.toString();
    4. const length = str.length;
    5. let dp = new Array(length).fill(0);
    6. dp[0] = 1;
    7. for(let i = 1; i < length; i++){
    8. let temp = Number(str[i-1] + str[i]);
    9. if (10 <= temp && temp <= 25){
    10. if (i > 1)
    11. dp[i] = dp[i-1] + dp[i-2];
    12. else
    13. dp[i] = 1 + dp[i-1];
    14. }else {
    15. dp[i] = dp[i-1];
    16. }
    17. }
    18. return dp.pop();
    19. };