JZ46-把數字翻譯成字串
阿新 • • 發佈:2021-09-20
JZ46-把數字翻譯成字串
,只有一位數的話翻譯方法是 1。但是通過推算可以找到規律,如果第 i -1 位和第 i - 2 位可以匹配到新字母的話,f(i) = f(i-1) + f(i-2)。為了便於計算我們規定沒數字的話,那麼翻譯方法也是 1 。
原題連結
描述
給定一個數字,我們按照如下規則把它翻譯為字串:0 翻譯成 “a” ,1 翻譯成 “b”,……,11 翻譯成 “l”,……,25 翻譯成 “z”。一個數字可能有多個翻譯。請程式設計實現一個函式,用來計算一個數字有多少種不同的翻譯方法。
示例
輸入: 12258
輸出: 5
解釋: 12258有5種不同的翻譯,分別是"bccfi", "bwfi", "bczi", "mcfi"和"mzi
思路
動規。從右向左遍歷每一位數,之所以會有不同的翻譯方法,就是看第 i 位和第 i - 1 位組成的數字能否成功匹配到一個新的字母(i不為0)。正常而言,如果沒數字的話,那麼翻譯方法也是0
解答
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