Leetcode刷题记录——91. 解码方法

    技术2025-05-23  39

    是一道极其基本的动态规划问题 需要注意的是如果str的首字母为0,可以直接在这个case下return 0的

    动态规划要么像下面写法1一样写dict 要么像下面写法2这样偷懒,用lru_cache

    写法1 老老实实写dict

    #from functools import lru_cache class Solution: def __init__(self): self.idi = {'':1} #@lru_cache() def numDecodings(self, s: str) -> int: if s in self.idi: return self.idi[s] #if s == '': # return 1 elif s[0] == '0': self.idi[s] = 0 return 0 if len(s) == 1: self.idi[s] = 1 if s != '0' else 0 return 1 if s != '0' else 0 head = int(s[:2]) if head >= 10 and head <= 26: self.idi[s] = self.numDecodings(s[1:]) + self.numDecodings(s[2:]) return self.idi[s] else: self.idi[s] = self.numDecodings(s[1:]) return self.idi[s]

    写法2 投机取巧用lru_cache

    from functools import lru_cache class Solution: #def __init__(self): @lru_cache() def numDecodings(self, s: str) -> int: if s == '': return 1 elif s[0] == '0': return 0 if len(s) == 1: return 1 if s != '0' else 0 head = int(s[:2]) if head >= 10 and head <= 26: return self.numDecodings(s[1:]) + self.numDecodings(s[2:]) else: return self.numDecodings(s[1:])
    Processed: 0.010, SQL: 9