91. Decode Ways

没想到这题用backtrack会TLE,毕竟题目也没给数据规模,以为要求不会很高。

能做backtrack的题目普遍也都可以bottom-up DP,这题里s[1:n+1]的解法方法总数dp[n]需要靠dp[n-2], dp[n-1]得出。即如果s[n-2:n]是个10到26之间的数,就可以把dp[n-2]数量也加入dp[n]的数量。

class Solution:
    def numDecodings(self, s: str) -> int:
        self.count = 0
        self.backtrack(s, 0)
        return self.count
    
    def backtrack(self, s, idx):
        if idx == len(s): 
            self.count += 1
            return
        if s[idx] != "0":
            self.backtrack(s, idx+1)
            if idx <= len(s)-2 and int(s[idx]+s[idx+1]) <= 26:
                self.backtrack(s, idx+2)
        return count

Last updated

Was this helpful?