Decode Ways @ LeetCode (Python)
kitt
posted @ 2014年3月06日 22:33
in LeetCode
, 2691 阅读
动态规划, 看一位是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)]
2015年5月21日 13:45
好简洁!
你是怎么样能够一下子想到“看一位是0还是1~9” “看两位是不是在10~26之间” 这两个关键条件的?
我只想到第一个,“看一位是0还是1~9”, 没想到第二个。 所以code越写越长,condition越写越多也不能包涵所有情况。
2015年5月21日 15:30
我原来室友告诉我的,他是搞ACM的,擅长动态规划的题目。Python本来就比较简洁嘛:) @fuiiii: