我的笨方法和取巧方法

    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]