描述:
給定一個數字,我們按照如下規則把它翻譯爲字符串:0 翻譯成 “a” ,1 翻譯成 “b”,……,11 翻譯成 “l”,……,25 翻譯成 “z”。一個數字可能有多個翻譯。請編程實現一個函數,用來計算一個數字有多少種不同的翻譯方法。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
關鍵點:動態規劃
狀態轉移方程
有兩種情況:
1、長度<9 and >26
2、長度在【10,25】
狀態轉移方程:
dp[i] = dp[i-1] -> 情況一
dp[i ] = dp[i-1] +dp[i-2] -> 情況二
初始狀態dp[0] = dp[1] =1
class Solution(object):
def translateNum(self, num):
"""
:type num: int
:rtype: int
"""
num = str(num)
dp = [0] * (len(num) + 1)
dp[0] = dp[1] = 1
for i in range(2, len(num) + 1):
dp[i] = dp[i-1] + (dp[i-2] if num[i-2] != '0' and num[i - 2:i] < '26' else 0)
print(dp)
return dp[-1]