解题思路
动态规划
有以下几种情况:
1. 当i-1=0,如果i-2=[1到2],dp[i]=dp[i-2];否则返回0;
2. 当i-1=[1到6],如果i-2=[1到2],dp[i]=dp[i-1]+dp[i-2]; 否则dp[i]=dp[i-1];
3. 当i-1=[7到9],如果i-2=1,dp[i]=dp[i-1]+dp[i-2]; 否则dp[i]=dp[i-1];
代码如下:
public int sover(String s) {
if(s.length()==0 || s.charAt(0)=='0'){
return 0;
}
char[] chars = s.toCharArray();
int[] dp = new int[chars.length+1];
dp[0]=dp[1]=1;
for(int i=2;i<=chars.length;i++){
if(chars[i-1]=='0'){
if(chars[i-2]=='1' || chars[i-2]=='2'){
dp[i] = dp[i-2];
}else{
return 0;
}
}else if(chars[i-1]>='1' && chars[i-1]<='6'){
if(chars[i-2]=='1' || chars[i-2]=='2'){
dp[i] = dp[i-1]+dp[i-2];
}else{
dp[i] = dp[i-1];
}
}else{
if(chars[i-2]=='1'){
dp[i] = dp[i-1]+dp[i-2];
}else{
dp[i] = dp[i-1];
}
}
}
return dp[chars.length];
}


京公网安备 11010502036488号