dengxinyi 6 роки тому
батько
коміт
b566060533
1 змінених файлів з 46 додано та 0 видалено
  1. 46 0
      hard/639.decode-ways-ii.go

+ 46 - 0
hard/639.decode-ways-ii.go

@@ -0,0 +1,46 @@
+const MOD int = 1000000007
+
+func numDecodings(s string) int {
+	n := len(s)
+	if n == 0 {
+		return 1
+	}
+	dp := make([]int, n+1)
+	dp[0] = 1
+	switch s[0] {
+	case '*':
+		dp[1] = 9
+	case '0':
+		return 0
+	default:
+		dp[1] = 1
+	}
+	for i := 2; i <= n; i++ {
+		if s[i-1] == '*' {
+			dp[i] = 9 * dp[i-1] // blabla | *
+			if s[i-2] == '1' || s[i-2] == '*' {
+				dp[i] += 9 * dp[i-2] // blabla | 1*
+			}
+			if s[i-2] == '2' || s[i-2] == '*' {
+				dp[i] += 6 * dp[i-2] // blabla | 2*
+			}
+		} else if s[i-1] != '0' {
+			dp[i] = dp[i-1]
+			if s[i-2] == '1' || s[i-2] == '*' {
+				dp[i] += dp[i-2] // blabla | 17
+			}
+			if s[i-1] < '7' && (s[i-2] == '2' || s[i-2] == '*') {
+				dp[i] += dp[i-2] // blabla | 26
+			}
+		} else {
+			if s[i-2] == '1' || s[i-2] == '*' {
+				dp[i] += dp[i-2] // blabla | 10
+			}
+			if s[i-2] == '2' || s[i-2] == '*' {
+				dp[i] += dp[i-2] // blabla | 20
+			}
+		}
+		dp[i] %= MOD
+	}
+	return dp[n]
+}