Skip to content

Commit e6fb7a4

Browse files
decode ways
1 parent 6a5e4bc commit e6fb7a4

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

MEDIUM/src/medium/DecodeWays.java

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package medium;
2+
import java.util.*;
3+
/**
4+
* Created by fishercoder1534 on 10/3/16.
5+
*/
6+
public class DecodeWays {
7+
/**Then I found this post is very concise: https://discuss.leetcode.com/topic/35840/java-clean-dp-solution-with-explanation*/
8+
public static int numDecodings_solution2(String s) {
9+
if(s == null || s.length() == 0) return 0;
10+
int[] dp = new int[s.length()+1];
11+
dp[0] = 1;
12+
dp[1] = (s.charAt(0) != '0') ? 1 : 0;
13+
for(int i = 2; i <= s.length(); i++){
14+
int first = Integer.valueOf(s.substring(i-1,i));
15+
int second = Integer.valueOf(s.substring(i-2, i));
16+
if(first > 0 && first <= 9) dp[i] += dp[i-1];
17+
if(second >= 10 && second <= 26) dp[i] += dp[i-2];
18+
}
19+
return dp[s.length()];
20+
}
21+
22+
23+
/**My original accepted yet lengthy solution.*/
24+
public static int numDecodings_solution1(String s) {
25+
26+
if(s == null || s.length() == 0) return 0;
27+
Set<String> validStrings = new HashSet();
28+
validStrings.add("1");
29+
validStrings.add("2");
30+
validStrings.add("3");
31+
validStrings.add("4");
32+
validStrings.add("5");
33+
validStrings.add("6");
34+
validStrings.add("7");
35+
validStrings.add("8");
36+
validStrings.add("9");
37+
validStrings.add("10");
38+
validStrings.add("11");
39+
validStrings.add("12");
40+
validStrings.add("13");
41+
validStrings.add("14");
42+
validStrings.add("15");
43+
validStrings.add("16");
44+
validStrings.add("17");
45+
validStrings.add("18");
46+
validStrings.add("19");
47+
validStrings.add("20");
48+
validStrings.add("21");
49+
validStrings.add("22");
50+
validStrings.add("23");
51+
validStrings.add("24");
52+
validStrings.add("25");
53+
validStrings.add("26");
54+
55+
int n = s.length();
56+
int[] dp = new int[n];
57+
if(validStrings.contains(s.substring(0,1))) dp[0] = 1;
58+
else dp[0] = 0;
59+
60+
for(int i = 1; i < n; i++){
61+
if(validStrings.contains(s.substring(i,i+1)) && validStrings.contains(s.substring(i-1,i+1))) {
62+
if(i > 1){
63+
dp[i] = dp[i-2] + dp[i-1];
64+
} else {
65+
dp[1] = 2;
66+
}
67+
} else if(!validStrings.contains(s.substring(i,i+1)) && !validStrings.contains(s.substring(i-1,i+1))){
68+
return 0;
69+
} else if(!validStrings.contains(s.substring(i,i+1)) && validStrings.contains(s.substring(i-1,i+1))){
70+
if(i > 1) dp[i] = dp[i-2];
71+
else dp[i] = dp[i-1];
72+
}
73+
else dp[i] = dp[i-1];
74+
}
75+
76+
return dp[n-1];
77+
78+
}
79+
80+
public static void main(String...args){
81+
String msg = "100";
82+
83+
}
84+
}

0 commit comments

Comments
 (0)