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];
    }
};
相關文章
相關標籤/搜索