和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

JZ46-把数字翻译成字符串

原题链接


描述

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

示例

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

思路

动规。从右向左遍历每一位数,之所以会有不同的翻译方法,就是看第 i 位和第 i - 1 位组成的数字能否成功匹配到一个新的字母(i不为0)。正常而言,如果没数字的话,那么翻译方法也是0,只有一位数的话翻译方法是 1。但是通过推算可以找到规律,如果第 i -1 位和第 i - 2 位可以匹配到新字母的话,f(i) = f(i-1) + f(i-2)。为了便于计算我们规定没数字的话,那么翻译方法也是 1


解答

class Solution {
    public int translateNum(int num) {
        int res = 1;// 结果至少是 
   
        int tail = num % 10;// 保存尾随在后面的数
        int pre1 = 1, pre2 = 1;

        num /= 10;

        while (num != 0) {
            int digit = num % 10;
            if (tail + digit * 10 <= 25 && tail + digit * 10 != tail)
                res = pre1 + pre2;
            else
                res = pre1;

            pre2 = pre1;
            pre1 = res;

            tail = digit;
            num = num / 10;
        }
        return res;
    }

}
posted @ 2021-09-19 22:24  klaus08  阅读(98)  评论(0编辑  收藏  举报