91. Decode Ways
Medium
A message containing letters from A-Z
is being encoded to numbers using the following mapping:
'A' -> 1 'B' -> 2 ... 'Z' -> 26
Given a non-empty string containing only digits, determine the total number of ways to decode it.
The answer is guaranteed to fit in a 32-bit integer.
Example 1:
Input: s = "12" Output: 2 Explanation: It could be decoded as "AB" (1 2) or "L" (12).
Example 2:
Input: s = "226" Output: 3 Explanation: It could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).
Example 3:
Input: s = "0" Output: 0 Explanation: There is no character that is mapped to a number starting with '0'. We cannot ignore a zero when we face it while decoding. So, each '0' should be part of "10" --> 'J' or "20" --> 'T'.
Example 4:
Input: s = "1" Output: 1
Constraints:
1 <= s.length <= 100
s
contains only digits and may contain leading zero(s).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | class Solution { public: int numDecodings(string s) { int n = s.size(); vector<int> dp(n, 0); for (int i = 0; i < n; ++i) { int v = 0; if (i > 0) v = stoi(s.substr(i - 1, 2)); if (s[i] == '0') { if (v == 10 || v == 20) dp[i] = i > 1 ? dp[i - 2] : 1; } else { dp[i] = i > 0 ? dp[i - 1] : 1; if (v >= 10 && v <= 26) { dp[i] += i > 1 ? dp[i - 2] : 1; } } } return dp[n - 1]; } }; class Solution { public: int numDecodings(string s) { int n = s.size(); if(n==0) return n; int dp[10000] = {0}; dp[n] = 1; dp[n-1] = s[n-1]=='0'?0:1; for(int i=n-2; i>=0; --i){ if(s[i]=='0') continue; int v = stoi(s.substr(i,2)); dp[i] = v<=26?dp[i+1]+dp[i+2]:dp[i+1]; } return dp[0]; } }; #define N 10000 class Solution { public: int numDecodings(string s) { int n = s.size(); if(!n) return 0; int dp[N] = {0}; dp[0] = 1; for(int i=1; i<=n; ++i){ if(s[i-1]!='0') dp[i] = dp[i-1]; if(i-2>=0) if(s[i-2]=='1'||(s[i-2]=='2'&&s[i-1]>='0'&&s[i-1]<='6')) dp[i] += dp[i-2]; } return dp[n]; } }; |
No comments:
Post a Comment