我的笨方法和取巧方法
class Solution:
def numDecodings(self, s: str) -> int:
if not s or s[0] == "0":
return 0
n = len(s)
f = [0] * (n + 1)
f[0] = 1
f[1] = 1
for i in range(2, n+1):
if s[i-2] == "0" and s[i-1] == "0":
return 0
elif s[i-2] != "0" and int(s[i-2:i]) <= 26:
f[i] = f[i-1] * (not s[i-1] == "0") + f[i-2]
elif int(s[i-2:i]) > 26 and s[i-1] == "0":
f[i] = 0
else:
f[i] = f[i-1]
print(f)
return f[-1]
class Solution:
def numDecodings(self, s: str) -> int:
if not s or s[0] == "0":
return 0
n = len(s)
f = [0] * (n + 1)
f[0] = 1
f[1] = 1
for i in range(2, n+1):
first = int(s[i-1])
second = int(s[i-2:i])
if 1 <= first <= 26:
f[i] += f[i-1]
if 10 <= second <= 26:
f[i] += f[i-2]
return f[-1]
