题目描述:
题解:动态规划
1.如果s以0开始,无法解码,返回0.
2.如果s中s[i-1:i+1]=='00'或者s[i-1]>'2' s[i]=='0'(因为s[i-1]>'2‘,所以s[i-1]必须与s[i-2]一起进行解码,但s[i]为0,无法作为一个合法解码的开头),返回0.
3.如果s[i-1:i+1]在1-26之间并且s[i]不为'0',s[i-1:i+1]可以一起解码,也可以s[i-1]和s[i-2]解码,s[i]单独解码。
4.如果s[i]=’0‘,s[i]必须与s[i-1]一起完成解码,如果s[i]!='0'但s[i-1:i+1]>'26',s[i-1]必须与s[i-2]一起解码,s[i]单独解码。
class Solution(object): def numDecodings(self, s): if s[0]=='0': return 0 dp = [1,1] for i in range(1,len(s)): if s[i-1:i+1]=='00' or (s[i]=='0' and s[i-1]>'2'): return 0 if '1'<=s[i-1:i+1]<='26' and s[i]!='0': dp.append(dp[-2]+dp[-1]) elif s[i]=='0': dp.append(dp[-2]) else: dp.append(dp[-1]) return dp[-1]