Decode Ways

这道题的思路和简单的上楼梯或者叫斐波那契数列很像,但是这里多了一个条件,即如果要i - 2的值则必须满足一些条件,这些条件就是这道题比较坑的地方,首先无字符状态的答案为0,但是我们在设置DP数列时0必须设置为1,其次如果当前字符为0的话dp[i - 1]的值也是拿不到的,而要拿到dp[i - 2]的值必须满足坐标大于等于2,同时还需要这两个字符组合起来的值在10到26之间,所以这道题对两个前导状态的判定是分开的

dp[i] = 0

if s[i - 1] != '0'
    dp[i] += dp[i - 1]

if i >= 2 and 10 <= int(s[i - 2:i]) <= 26:
    dp[i] += dp[i - 2]

下面是代码

class Solution(object):
    def numDecodings(self, s):
        """
        :type s: str
        :rtype: int
        """
        n = len(s)
        if not n:
            return 0

        dp = [0] * (n + 1)
        dp[0] = 1
        for i in xrange(1, n + 1):
            dp[i] = dp[i - 1] if s[i - 1] != '0' else 0
            if i >= 2 and 10 <= int(s[i - 2 : i]) <= 26:
                dp[i] += dp[i - 2]

        return dp[n]

results matching ""

    No results matching ""