Decode Ways II LeetCode solution in JavaScript

1
var numDecodings = function (s) {
2
let len = s.length;
3
if (len === 0) return s;
4
let mod = Math.pow(10, 9) + 7;
5
let dp = new Array(len + 1).fill(0);
6
dp[0] = 1;
7
if (s[0] == 0) dp[1] = 0;
8
else if (s[0] == "*") dp[1] = 9;
9
else dp[1] = 1;
10
for (let i = 2; i <= len; i++) {
11
if (s[i - 1] == "*") {
12
dp[i] += 9 * dp[i - 1];
13
} else if (s[i - 1] != 0 && s[i - 1] != "*") {
14
dp[i] += dp[i - 1];
15
}
16
if (s[i - 2] == 1) {
17
if (s[i - 1] == "*") dp[i] += 9 * dp[i - 2];
18
else dp[i] += dp[i - 2];
19
} else if (s[i - 2] == 2) {
20
if (s[i - 1] < 7) dp[i] += dp[i - 2];
21
else if (s[i - 1] == "*") dp[i] += 6 * dp[i - 2];
22
} else if (s[i - 2] == "*") {
23
if (s[i - 1] == "*") dp[i] += 15 * dp[i - 2];
24
else if (s[i - 1] >= 0 && s[i - 1] <= 6) dp[i] += 2 * dp[i - 2];
25
else if (s[i - 1] >= 7) dp[i] += dp[i - 2];
26
}
27
dp[i] = dp[i] % mod;
28
}
29
return dp[len] % mod;
30
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0