|
1 | | -/* |
2 | | - Given a string w/ only digits, return # ways to decode it (letter -> digit) |
3 | | - Ex. s = "12" -> 2 (AB 1 2 or L 12), s = "226" -> 3 (2 26 or 22 6 or 2 2 6) |
4 | | -
|
5 | | - DP: At each digit, check validity of ones & tens, if valid add to # ways |
6 | | - Recurrence relation: dp[i] += dp[i-1] (if valid) + dp[i-2] (if valid) |
7 | | -
|
8 | | - Time: O(n) |
9 | | - Space: O(n) |
10 | | -*/ |
11 | | -/* |
12 | | -class Solution { |
13 | | -public: |
14 | | - int numDecodings(string s) { |
15 | | - if (s[0] == '0') { |
16 | | - return 0; |
17 | | - } |
18 | | - |
19 | | - int n = s.size(); |
20 | | - |
21 | | - vector<int> dp(n + 1); |
22 | | - dp[0] = 1; |
23 | | - dp[1] = 1; |
24 | | - |
25 | | - for (int i = 2; i <= n; i++) { |
26 | | - int ones = stoi(s.substr(i - 1, 1)); |
27 | | - if (ones >= 1 && ones <= 9) { |
28 | | - dp[i] += dp[i - 1]; |
29 | | - } |
30 | | - int tens = stoi(s.substr(i - 2, 2)); |
31 | | - if (tens >= 10 && tens <= 26) { |
32 | | - dp[i] += dp[i - 2]; |
33 | | - } |
34 | | - } |
35 | | - |
36 | | - return dp[n]; |
37 | | - } |
38 | | -}; |
39 | | -*/ |
40 | | - |
41 | 1 | /* |
42 | 2 | Given a string w/ only digits, return # ways to decode it (letter -> digit) |
43 | 3 | Ex. s = "12" -> 2 (AB 1 2 or L 12), s = "226" -> 3 (2 26 or 22 6 or 2 2 6) |
@@ -74,3 +34,41 @@ class Solution { |
74 | 34 | return curr; |
75 | 35 | } |
76 | 36 | }; |
| 37 | + |
| 38 | +/* |
| 39 | + Given a string w/ only digits, return # ways to decode it (letter -> digit) |
| 40 | + Ex. s = "12" -> 2 (AB 1 2 or L 12), s = "226" -> 3 (2 26 or 22 6 or 2 2 6) |
| 41 | +
|
| 42 | + DP: At each digit, check validity of ones & tens, if valid add to # ways |
| 43 | + Recurrence relation: dp[i] += dp[i-1] (if valid) + dp[i-2] (if valid) |
| 44 | +
|
| 45 | + Time: O(n) |
| 46 | + Space: O(n) |
| 47 | +*/ |
| 48 | +class Solution2 { |
| 49 | +public: |
| 50 | + int numDecodings(string s) { |
| 51 | + if (s[0] == '0') { |
| 52 | + return 0; |
| 53 | + } |
| 54 | + |
| 55 | + int n = s.size(); |
| 56 | + |
| 57 | + vector<int> dp(n + 1); |
| 58 | + dp[0] = 1; |
| 59 | + dp[1] = 1; |
| 60 | + |
| 61 | + for (int i = 2; i <= n; i++) { |
| 62 | + int ones = stoi(s.substr(i - 1, 1)); |
| 63 | + if (ones >= 1 && ones <= 9) { |
| 64 | + dp[i] += dp[i - 1]; |
| 65 | + } |
| 66 | + int tens = stoi(s.substr(i - 2, 2)); |
| 67 | + if (tens >= 10 && tens <= 26) { |
| 68 | + dp[i] += dp[i - 2]; |
| 69 | + } |
| 70 | + } |
| 71 | + |
| 72 | + return dp[n]; |
| 73 | + } |
| 74 | +}; |
0 commit comments