题目链接:https://leetcode.com/problems/decode-ways/
思路:
用DP来做,从前往后依次判断当前的前一个以及前两个字符是否可以组成新的解码方式。
比如对于 1 0 1,它的解码方式只有一种,而1 1 1的解码方式有三种。
如果当前的前一个字符在1~9之间,那么此次的dp[i]+=dp[i-1];
如果当前的前两个字符在10~26之间,那么 dp[i]+=dp[i-2];
AC 1ms Java:
class Solution {
public int numDecodings(String s) {
if(s==null||s.length()==0)
return 0;
int[] dp=new int[s.length()+1];
dp[0]=s.charAt(0)=='0'?0:1;
dp[1]=s.charAt(0)=='0'?0:1;
for(int i=2;i<=s.length();i++){
int first=Integer.valueOf(s.substring(i-1,i));
int second=Integer.valueOf(s.substring(i-2,i));
if(first>=1&&first<=9)
dp[i]+=dp[i-1];
if(second>=10&&second<=26)
dp[i]+=dp[i-2];
}
return dp[s.length()];
}
}