| 12345678910111213141516171819202122232425262728293031323334353637383940414243 | 
							- const MOD int = 1000000007
 
- func numDecodings(s string) int {
 
- 	n := len(s)
 
- 	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]
 
- }
 
 
  |