import java.util.*; public class Solution { //解码:第i个字符结尾有多少种编码方式 //解码:i 单独解码,i与i-1结合解码,解码成功或失败 public int solve (String nums) { // write code here //1.创建dp int n= nums.length(); int[] dp = new int[n]; char[] c = nums.toCharArray(); //2。初始化, 要初始化前两个,防止越界 //单独解码 if(c[0]!='0') dp[0] +=1; //解码成功 if(n==1) return dp[0]; //长度为1 //单独解码 if(c[0]!='0'&&c[1]!='0') dp[1] +=1; //合并解码 int t = (c[0]-'0') *10 +c[1]-'0'; if(t>=10&&t<=26) dp[1] +=1; //3.填表 dp[i] = dp[i-1] +dp[i-2] for(int i=2;i<n;i++){ if(c[i]!='0') dp[i] += dp[i-1]; int tt = (c[i-1]-'0') *10 +c[i]-'0'; if(tt>=10&&tt<=26) dp[i] +=dp[i-2]; } return dp[n-1]; } }