https://leetcode-cn.com/problems/decode-ways/
Idea
典型的DP题
考虑字符串”21212”
从末尾考虑 它的解码种数为”2121” +”2”的解码数 或者”212”+”12”的解码数
又因为在”2121”+”2”中 , 2 1 2 1 2这一种情况已经被包含 ,所以”12”的解码数只剩下一种.
也就是 “21212”的解码种数 =”2121” 的解码种数 +”212”的解码种数
由此 我们可以很自然地考虑DP来解决这个问题
Code
public static int numDecodings(String s) {int size=s.length();Boolean tag=false;if(s.charAt(0)=='0')return 0;for(int i=0;i<size-1;i++){if(s.charAt(i)=='0'&&s.charAt(i+1)=='0')tag=true;}if(tag)return 0;if(size==1 )return 1;int[] dp=new int[size+1];dp[0]=1;dp[1]=1;char end;for(int i=1;i<size;i++) {end = s.charAt(i);if(end=='0' ){int c=s.charAt(i-1)-'0';if(c>2){dp[i+1]=0;}elsedp[i+1]=dp[i-1];}else {int a = s.charAt(i - 1) - '0';int b = s.charAt(i) - '0';if (a * 10 + b <= 26 && a!=0) {dp[i + 1] = dp[i] + dp[i - 1];} else {dp[i + 1] = dp[i];}}}return dp[size];}
