leetcode--91--解码方法

题目:
一条包含字母 A-Z 的消息通过以下方式进行了编码:

'A' -> 1
'B' -> 2
...
'Z' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。

示例 1:

输入: "12"
输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。
示例 2:

输入: "226"
输出: 3
解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。

链接:https://leetcode-cn.com/problems/decode-ways

思路:
1、这个题可以用dp来解,相当于一个进阶版的爬楼梯问题。f(x) = f(x-1)+f(x-2)
2、如果当前元素不为0,则dp[i+1]最起码可以和dp[i]的次数一样,即加上这部分的。
3、如果当前元素不为0并且当前元素和后一位元素组成的值小于等于26,则说明dp[i+2]的值起码和dp[i]的数量相等

Python代码:

class Solution(object):
    def numDecodings(self, s):
        """
        :type s: str
        :rtype: int
        """
        size = len(s)
        if (size==0):
            return 0
        dp = [0 for i in range(size+1)]
        dp[0] = 1

        for i in range(size):
            if s[i]!="0":
                dp[i+1] += dp[i]
            if s[i]!="0" and i+1

C++代码:

class Solution {
public:
    int numDecodings(string s) {
        int size = s.size();
        if (size==0){
            return 0;
        }
        vector dp(size+1,0) ;
        dp[0] = 1;

        for (int i=0; i

你可能感兴趣的:(leetcode--91--解码方法)