package main import ( "fmt" ) func main() { var str string for { n, _ := fmt.Scan(&str) if n == 0 { break } else { fmt.Println(process(str, 0)) } } } // func process(str string, i int) int { // if i == len(str) { // return 1 // } // if i > len(str) { // return 0 // } // sum := 0 // if str[i] == '1' { // sum += process(str, i+1) + process(str, i+2) // } else if str[i] == '2' { // sum = process(str, i+1) // if i+1 < len(str) && str[i+1] >= '0' && str[i+1] <= '6'{ // sum += process(str, i+2) // } // } else if str[i] == '0' [ // sum = 0 // ] else { // sum = process(str, i+1) // } // return sum // } func process(str string, i int) int { // 先搞递归,再搞dp // 对应初始化条件 // i == len(str) , dp[i] = 1 // i > len(str), dp[i] = 0 dp := make([]int, len(str)+2) dp[len(str)] = 1 // 从后往前,要求的答案为dp[0] for i:=len(str)-1; i>=0; i-- { // 全部抄过来,process返回的就是dp[i+1], dp[i+2]对应的值 if str[i] == '1' { dp[i] = dp[i+1] + dp[i+2] } else if str[i] == '2' { dp[i] = dp[i+1] if i+1 < len(str) && str[i+1] >= '0' && str[i+1] <= '6' { dp[i] += dp[i+2] } } else if str[i] == '0' { dp[i] = 0 } else { dp[i] = dp[i+1] } dp[i] = dp[i] % (1e9+7) } return dp[0] }