題目描述
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
来源:力扣(LeetCode)
解題思路
使用 DP + 递归算法 (由小至大,分解问题)
- 寻找规律:e.g. 1325 ,由个位数往前翻译
- 前 i 个数字翻译的方法 分成两种
- 单独翻译:
5
=> 前 i 个数字翻译的方法 記为 dp(i) ; dp(i) = dp(i-1) - 若与前一位数组合翻译:
25
,若该数值介于 10~ 25 之间,则 前 i 个数字翻译的方法数dp(i) 要再额外加上dp(i-2),也就是 dp(i) = dp(i-1) + dp(i-2)。
- 单独翻译:
- 前 i 个数字翻译的方法 分成两种
Python代碼
class Solution:
def translateNum(self, num: int) -> int:
n = len(str(num))
nums = str(num)
if n == 1:
return 1
if n == 2:
if 10 <= int(nums) <= 25:
return 2
else:
return 1
else:
if 10<= int(nums[-2:]) <= 25:
return self.translateNum(int(nums[:-1])) + self.translateNum(int(nums[:-2]))
else:
return self.translateNum(int(nums[:-1]))