Decode Ways II LeetCode solution in Java

1
class Solution {
2
public int numDecodings(String s) {
3
int[] dp = new int[s.length() + 1];
4
dp[0] = 1;
5
int M = (int) 1e9 + 7;
6
for (int i = 1; i <= s.length(); i++) {
7
for (int j = 1; j <= 26; j++) {
8
if (j < 10
9
&& (s.charAt(i - 1) - '0' == j
10
|| s.charAt(i - 1) == '*')) { // 1 digit -> if they are equal or if *
11
dp[i] += dp[i - 1];
12
dp[i] %= M;
13
}
14
if (i > 1 && j >= 10 && ok(j, s.substring(i - 2, i))) { // ok() function handles 2 digits
15
dp[i] += dp[i - 2];
16
dp[i] %= M;
17
}
18
}
19
}
20
return dp[s.length()];
21
}
22

23
private boolean ok(int val, String s) { // TRUE if the value s represents can equal to val.
24
return (s.equals("**") && val % 10 > 0
25
|| s.charAt(0) == '*' && val % 10 == s.charAt(1) - '0'
26
|| s.charAt(1) == '*' && val / 10 == s.charAt(0) - '0' && val % 10 > 0
27
|| !s.contains("*") && Integer.parseInt(s) == val);
28
}
29
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0