1
1
package com .fishercoder .solutions ;
2
2
3
- import java .util .HashSet ;
4
- import java .util .Set ;
5
-
6
3
/**
4
+ * 91. Decode Ways
5
+ *
7
6
* A message containing letters from A-Z is being encoded to numbers using the following mapping:
8
7
9
8
'A' -> 1
@@ -26,93 +25,25 @@ public class _91 {
26
25
* I then check one digit and two digit combination and save the results along the way.
27
26
* In the end, dp[n] will be the end result.*/
28
27
29
- public static int numDecodings_solution2 (String s ) {
28
+ public static class Solution1 {
29
+ public int numDecodings (String s ) {
30
30
if (s == null || s .length () == 0 ) {
31
- return 0 ;
31
+ return 0 ;
32
32
}
33
33
int [] dp = new int [s .length () + 1 ];
34
34
dp [0 ] = 1 ;
35
35
dp [1 ] = (s .charAt (0 ) != '0' ) ? 1 : 0 ;
36
36
for (int i = 2 ; i <= s .length (); i ++) {
37
- int first = Integer .valueOf (s .substring (i - 1 , i ));
38
- int second = Integer .valueOf (s .substring (i - 2 , i ));
39
- if (first > 0 && first <= 9 ) {
40
- dp [i ] += dp [i - 1 ];
41
- }
42
- if (second >= 10 && second <= 26 ) {
43
- dp [i ] += dp [i - 2 ];
44
- }
37
+ int first = Integer .valueOf (s .substring (i - 1 , i ));
38
+ int second = Integer .valueOf (s .substring (i - 2 , i ));
39
+ if (first > 0 && first <= 9 ) {
40
+ dp [i ] += dp [i - 1 ];
41
+ }
42
+ if (second >= 10 && second <= 26 ) {
43
+ dp [i ] += dp [i - 2 ];
44
+ }
45
45
}
46
46
return dp [s .length ()];
47
- }
48
-
49
- public static void main (String ... args ) {
50
- String msg = "100" ;
51
- }
52
-
53
- /**
54
- * My original accepted yet lengthy solution.
55
- */
56
- public static int numDecodings_solution1 (String s ) {
57
-
58
- if (s == null || s .length () == 0 ) {
59
- return 0 ;
60
- }
61
- Set <String > validStrings = new HashSet ();
62
- validStrings .add ("1" );
63
- validStrings .add ("2" );
64
- validStrings .add ("3" );
65
- validStrings .add ("4" );
66
- validStrings .add ("5" );
67
- validStrings .add ("6" );
68
- validStrings .add ("7" );
69
- validStrings .add ("8" );
70
- validStrings .add ("9" );
71
- validStrings .add ("10" );
72
- validStrings .add ("11" );
73
- validStrings .add ("12" );
74
- validStrings .add ("13" );
75
- validStrings .add ("14" );
76
- validStrings .add ("15" );
77
- validStrings .add ("16" );
78
- validStrings .add ("17" );
79
- validStrings .add ("18" );
80
- validStrings .add ("19" );
81
- validStrings .add ("20" );
82
- validStrings .add ("21" );
83
- validStrings .add ("22" );
84
- validStrings .add ("23" );
85
- validStrings .add ("24" );
86
- validStrings .add ("25" );
87
- validStrings .add ("26" );
88
-
89
- int n = s .length ();
90
- int [] dp = new int [n ];
91
- if (validStrings .contains (s .substring (0 , 1 ))) {
92
- dp [0 ] = 1 ;
93
- } else {
94
- dp [0 ] = 0 ;
95
- }
96
-
97
- for (int i = 1 ; i < n ; i ++) {
98
- if (validStrings .contains (s .substring (i , i + 1 )) && validStrings .contains (s .substring (i - 1 , i + 1 ))) {
99
- if (i > 1 ) {
100
- dp [i ] = dp [i - 2 ] + dp [i - 1 ];
101
- } else {
102
- dp [1 ] = 2 ;
103
- }
104
- } else if (!validStrings .contains (s .substring (i , i + 1 )) && !validStrings .contains (s .substring (i - 1 , i + 1 ))) {
105
- return 0 ;
106
- } else if (!validStrings .contains (s .substring (i , i + 1 )) && validStrings .contains (s .substring (i - 1 , i + 1 ))) {
107
- if (i > 1 ) {
108
- dp [i ] = dp [i - 2 ];
109
- } else {
110
- dp [i ] = dp [i - 1 ];
111
- }
112
- } else {
113
- dp [i ] = dp [i - 1 ];
114
- }
115
- }
116
- return dp [n - 1 ];
47
+ }
117
48
}
118
49
}
0 commit comments