《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/

看完這個分析結果就很清晰了,上代碼:

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<number<26:
                dp[i] = dp[i-1]+dp[i-2]
            else:
                dp[i] = dp[i-1]

        return dp[-1]

 總結:動態規劃解決問題的思路不難,難得是如何把問題轉換成動態規劃。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章