Leetcode: 91. Decode Ways

Description

A message containing letters from A-Z is being encoded to numbers using the following mapping:git

'A' -> 1
'B' -> 2
...
'Z' -> 26

Given an encoded message containing digits, determine the total number of ways to decode it.数组

Example

Given encoded message "12", it could be decoded as "AB" (1 2) or "L" (12).

The number of ways decoding "12" is 2.

思路

  • 动态规划
  • 对每一个数组首先判断其是否为0,如果将改成dp赋0,若不是,赋上一个dp值,此时至关如加上了dp[i - 1], 而后看数组前一位是否存在,若是存在且知足前一位不是0,且和当前为一块儿组成的两位数不大于26,则当前dp值加上dp[i - 2],

代码

class Solution {
public:
    int numDecodings(string s) {
        int len = s.size();
        if(len == 0) return 0;
        
        vector<int> dp(len + 1, 0);
        dp[0] = 1;
        
        
        for(int i = 1; i < len + 1; ++i){
            dp[i] = (s[i - 1] == '0') ? 0 : dp[i - 1];
            
            if(i > 1 && (s[i - 2] == '1' || (s[i - 2] == '2' && s[i - 1] <= '6')))
                dp[i] += dp[i - 2];
        }
        
        return dp[len];
    }
};
相关文章
相关标签/搜索