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

    示例 1:

    输入: 12258
    输出: 5
    解释: 12258有5种不同的翻译,分别是”bccfi”, “bwfi”, “bczi”, “mcfi”和”mzi”

    提示:

    0 <= num < 231
    方法一:截取字符比较法(从左到右循环)

    1. /**
    2. * @param {number} num
    3. * @return {number}
    4. */
    5. var translateNum = function(num) {
    6. let a = 1;
    7. let b = 1;
    8. let s = String(num)
    9. for(let i = 2;i<=s.length;i++){
    10. let tmp = s.substring(i-2,i)
    11. let c = (tmp.localeCompare('10')>0||tmp.localeCompare('10')==0)&&(tmp.localeCompare('25')<0||tmp.localeCompare('25')==0)?a+b:b
    12. a = b
    13. b = c
    14. }
    15. return b
    16. };

    方法二:截取数字比较法(除余的方法截取数字,从右到左循环)

    1. /**
    2. * @param {number} num
    3. * @return {number}
    4. */
    5. var translateNum = function(num) {
    6. let a = 1;
    7. let b = 1;
    8. let x = num%10;
    9. let y = num%10;
    10. while(num!=0){
    11. num = parseInt(num/10)
    12. x = num%10
    13. let tmp = x*10+y
    14. let c = 0
    15. if(tmp>=10&&tmp<=25){
    16. c=a+b
    17. }else{
    18. c = a
    19. }
    20. b = a;
    21. a = c;
    22. y = x;
    23. }
    24. return a;
    25. };

    tips:
    6d108b0c8785277b64b0f0c61dfea49.png