解题思路
动态规划
有以下几种情况:
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];
    }