91-Decode-Ways
Last updated
Last updated
class Solution {
public int numDecodings(String s) {
char[] str=s.toCharArray();
if(str[0]=='0'){
return 0;
}
return recur(str,0);
}
private int recur(char[] str,int index){
int result=0;
if(index==str.length){
return 1;
}
//不可能和后面的字符产生组合
if(str[index]=='0'){
return 0;
}
else if(str[index]>'2' && str[index]<='9'){
return recur(str,index+1);
}
else if(str[index]=='1'){
result+=recur(str,index+1);
if(index+1<str.length){
result+=recur(str,index+2);
}
}else{
result+=recur(str,index+1);
if(index+1<str.length && str[index+1]>='0' && str[index+1]<='6'){
result+=recur(str,index+2);
}
}
return result;
}
}class Solution {
public int numDecodings(String s) {
char[] str=s.toCharArray();
if(str[0]=='0'){
return 0;
}
return recur(str,0);
}
private int recur(char[] str,int index){
int[] dp=new int[str.length+1];
int length=str.length;
dp[length]=1;
for(int i=length-1;i>-1;i--){
if(str[i]=='0'){
dp[i]=0;
}else if(str[i]>'2' && str[i]<='9'){
dp[i]=dp[i+1];
}else if(str[i]=='1'){
dp[i]=dp[i+1];
if(i+1<length){
dp[i]+=dp[i+2];
}
}else{
dp[i]=dp[i+1];
if(i+1<length && str[i+1]>='0' && str[i+1]<='6'){
dp[i]+=dp[i+2];
}
}
}
return dp[0];
}
}