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