#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Decode Ways
A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message "12", it could be decoded as "AB" (1 2) or "L" (12).
The number of ways decoding "12" is 2.
走台阶问题的变种
'''
class Solution(object):
def numDecodings(self, s):
"""
:type s: str
:rtype: int
"""
length = len(s)
if length == 0 or s[0] == '0':
return 0
dp = [0] * (length + 1)
dp[0] = dp[1] = 1
index = 1
while index < length:
#如果当前数字不为0,说明当前位置可以独当一面...
if s[index] != '0':
dp[index + 1] += dp[index]
#当前数据也可能与前一位搭伙,但是要符合10~27的范围
if '10' <= s[index - 1: index + 1] < '27':
dp[index + 1] += dp[index - 1]
index += 1
#print dp
return dp[-1]
if __name__ == "__main__":
s = Solution()
print s.numDecodings('335')
print s.numDecodings('205')
print s.numDecodings('101')
81 leetcode - Decode Ways
最新推荐文章于 2024-08-10 22:52:22 发布