一條包含字母 a-z 的訊息通過以下方式進行了編碼:
'a' -> 1
'b' -> 2
...'z' -> 26
給定乙個只包含數字的非空字串,請計算解碼方法的總數。
示例 1:
輸入: "12"
輸出: 2
解釋: 它可以解碼為 "ab"(1 2)或者 "l"(12)。
示例 2:
輸入: "226"
輸出: 3
解釋: 它可以解碼為 "bz" (2 26), "vf" (22 6), 或者 "bbf" (2 2 6) 。
思路:dp 以下標為狀態,找到dp[i]與dp[i-1],dp[i-2]的關係 因為最多兩位數
class solution(object):
def numdecodings(self, s):
""":type s: str
:rtype: int
"""# dp解決 dp[i]=dp[i-1]+dp[i-2] 2種情況 要麼單獨要麼加上前乙個字母 注意:'0'的特殊處理
if not s:return 0
n=len(s)
dp=[0]*(n+1)
if s[0]=='0':return 0
if n==1:return 1
dp[0],dp[1]=1,1
for i in range(2,n+1):
# 判斷是否為0 1.判斷當前是否為0 2.判斷上乙個是否為0
if s[i-1]=='0':
if s[i-2]=='0':return 0
if int(s[i-2]+s[i-1])>26:return 0
else:dp[i]=dp[i-2]
else:
if s[i-2]=='0':dp[i]=dp[i-1]
elif int(s[i-2]+s[i-1])>26:
dp[i]=dp[i-1]
else:dp[i]=dp[i-2]+dp[i-1]
return dp[-1]
LeetCode91 解碼方法
這題,我花了好大的功夫才通過,中途踩了很多坑,從這個15頂25踩,通過率只有10 多,就能看出這個題,雖然是乙個中等難度的題,但是並沒有那麼好做。看到題目,感覺有點像爬樓梯的那個?想到用動態規劃。第一次寫 沒有考慮0的情況,出錯,那麼就考慮吧,如果出現在頭,就返回0,出現的中間的話。不過我是從後往前...
LeetCode 91 解碼方法
一條包含字母a z的訊息通過以下方式進行了編碼 a 1 b 2 z 26 給定乙個只包含數字的非空字串,請計算解碼方法的總數。示例 1 輸入 12 輸出 2 解釋 它可以解碼為 ab 1 2 或者 l 12 示例 2 輸入 226 輸出 3 解釋 它可以解碼為 bz 2 26 vf 22 6 或者 ...
leetcode 91 解碼方法
一條包含字母a z的訊息通過以下方式進行了編碼 a 1 b 2 z 26給定乙個只包含數字的非空字串,請計算解碼方法的總數。示例 1 輸入 12 輸出 2解釋 它可以解碼為 ab 1 2 或者 l 12 示例 2 輸入 226 輸出 3解釋 它可以解碼為 bz 2 26 vf 22 6 或者 bbf...