Substring with Concatenation of All Words @ LeetCode (Python)
Reverse Words in a String @ LeetCode (Python)

Decode Ways @ LeetCode (Python)

kitt posted @ 2014年3月06日 22:33 in LeetCode , 2627 阅读

动态规划, 看一位是0还是1~9,看两位是不是在10~26之间。dp[N] = M 表示字符串s的前N位有M种解码方式。

class Solution:
    # @param s, a string
    # @return an integer
    def numDecodings(self, s):
        if not s: return 0
        # dp[M] means decode ways for first M letters of s
        dp = [0 for i in xrange(len(s) + 1)]
        dp[0] = 1
        dp[1] = 0 if s[0] == '0' else 1
        for i in xrange(2, len(s) + 1):
            if s[i-1] != '0': dp[i] += dp[i-1]
            if 10 <= int(s[i-2:i]) <= 26: dp[i] += dp[i-2]
        return dp[len(s)]
Avatar_small
fuiiii 说:
2015年5月21日 13:45

好简洁!
你是怎么样能够一下子想到“看一位是0还是1~9” “看两位是不是在10~26之间” 这两个关键条件的?
我只想到第一个,“看一位是0还是1~9”, 没想到第二个。 所以code越写越长,condition越写越多也不能包涵所有情况。

Avatar_small
kitt 说:
2015年5月21日 15:30

我原来室友告诉我的,他是搞ACM的,擅长动态规划的题目。Python本来就比较简洁嘛:) @fuiiii:


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter