《Leetcode》面试题46. 把数字翻译成字符串

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

示例 1:

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

思路:

有一次倒在了动态规划的问题上,一开始我把这个题目认为是排列组合,最后发现我太天真了;既然DP那就是以第i个下标结尾的数字有多少种排列组合。以这个题目为例子:

dp[0]=1 dp[1]=2 dp[2] =3 dp[3] =5 dp[4]=5

这个图来自https://leetcode-cn.com/u/jyd/

《Leetcode》面试题46. 把数字翻译成字符串_第1张图片

看完这个分析结果就很清晰了,上代码:

class Solution:
    def translateNum(self, num: int) -> int:

        
        num = str(num)
        size = len(num)
        if size==1:
            return 1
        dp = [0 for i in range(size)]
        dp[0]=1
        dp[1]=2 if int(num[0]+num[1])<26 else 1

        for i in range(2,size):
            number = int(num[i-1]+num[i])
            if 9

 总结:动态规划解决问题的思路不难,难得是如何把问题转换成动态规划。

你可能感兴趣的:(Leetcode,动态规划)