1. 程式人生 > 其它 >JZ46-把數字翻譯成字串

JZ46-把數字翻譯成字串

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;
    }

}

本文來自部落格園,作者:klaus08,轉載請註明原文連結:https://www.cnblogs.com/klaus08/p/15312991.html