class Solution {
public static final long MOD=1000000007;
public int numDecodings(String str) {
char[] s=str.toCharArray();
int n=s.length;
long[] dp=new long[n];
if(s[0]=='0')
return 0;
dp[0]=(s[0]!='*')?1:9;
for(int i=1;i<n;i++){
if(s[i]!='0'){
if(s[i]!='*')
dp[i]=(dp[i]+dp[i-1])%MOD;
else
dp[i]=(dp[i]+dp[i-1]*9)%MOD;
}
long now=((i-2)>=0)?dp[i-2]:1;
if(s[i-1]=='0'||s[i-1]>='3')
continue;
if(s[i-1]=='1'){
if(s[i]=='*')
dp[i]=(dp[i]+9*now)%MOD;
else
dp[i]=(dp[i]+now)%MOD;
}else if(s[i-1]=='2'){
if(s[i]=='*')
dp[i]=(dp[i]+6*now)%MOD;
else if(s[i]<='6')
dp[i]=(dp[i]+now)%MOD;
}else{
if(s[i]=='*')
dp[i]=(dp[i]+15*now)%MOD;
else if(s[i]<='6')
dp[i]=(dp[i]+2*now)%MOD;
else
dp[i]=(dp[i]+now)%MOD;
}
}
return (int)dp[n-1];
}
}
04-27
04-27
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交