中文版leetcode上线啦!!!
虽然功能尚未完善,但是看题目的时候舒服了不少。
题目描述:
包含 A-Z
的字母的消息通过以下规则编码:
'A' -> 1 'B' -> 2 ... 'Z' -> 26
给定一个包含数字的编码消息,请确定解码方法的总数。
例如,
给定消息为 "12"
, 它可以解码为 "AB"
(1 2)或 "L"
(12)。
"12"
的解码方法为 2 种。
我的思路:
出现1-9并且加上之前的数字的值在9< <27之间。那么得到的结果就是当前的结果加上去掉最后一位的结果,一位最后两位可以当作一个code。
我的代码:
def numDecodings(self, s):
"""
:type s: str
:rtype: int
"""
rel = int(s>'')
pre_rel = 0
pre_num = ''
for num in s:
tmp = rel
rel = (num>'0')*rel + (9<int(pre_num+num)<27)*pre_rel
pre_rel = tmp
pre_num = num
return rel
Discuss:
class Solution:
# @param s, a string
# @return an integer
def numDecodings(self, s):
#dp[i] = dp[i-1] if s[i] != "0"
# +dp[i-2] if "09" < s[i-1:i+1] < "27"
if s == "": return 0
dp = [0 for x in range(len(s)+1)]
dp[0] = 1
for i in range(1, len(s)+1):
if s[i-1] != "0":
dp[i] += dp[i-1]
if i != 1 and s[i-2:i] < "27" and s[i-2:i] > "09": #"01"ways = 0
dp[i] += dp[i-2]
return dp[len(s)]
学到: