这道题目的动态规划递推公式很容易想到:
但是难点在于包含许多需要特判的情况,比如最后两位的大小需要尤其注意
class Solution:
def numDecodings(self, s: str) -> int:
import functools
@functools.lru_cache(None)
def fuc(subs):
n = len(subs)
if n == 0: return 1
if int(subs) == 0: return 0
if n == 1: return 1
last_two = int(subs[n-2:])
last_one = int(subs[n-1:])
if last_two == 0 or (last_two > 26 and last_one == 0):
return 0
if last_two <= 26 and last_two >= 10:
if last_one != 0:
return fuc(subs[:n-1]) + fuc(subs[:n-2])
else:
return fuc(subs[:n-2])
return fuc(subs[:n-1])
return fuc(s)