假设现在需要对一串数字字符串进行解码,我们知道改字符串的编码规则是
1->A
2->B
...
26->Z
输出数字N代表有多少种可能的结果
例如:
输入:
111
输出:
3
对应的结果是
AAA 、AK、KA
这是一个使用动态规划的题目
JAVA代码实现:
public class Solution {
public int numDecodings(String s) {
if(s.length()==0||s.charAt(0)=='0'){
return 0;
}
int dp[] = new int[s.length() +1];
dp[0]=1;
dp[1]=1;
for(int i=2;i<=s.length();i++){
if(s.charAt(i-1)!='0'){
dp[i] += dp[i-1];
}
if(Integer.valueOf(s.substring(i-2,i))>=10
&& Integer.valueOf(s.substring(i-2,i))<=26){
dp[i] +=dp[i-2];
}
}
return dp[s.length()];
}
}
二方法:
public static int numDecodings(String str){
if(str.length()==0||str.charAt(0)=='0'){
return 0;
}
int num = str.length();
int dp[] = new int[str.length()];
dp[0]=1;
for(int i=1;i<str.length();i++){
if(str.charAt(i)>='1'&& str.charAt(i)<='9'){
dp[i] = dp[i]+dp[i-1];
}
if (str.substring(i-1,i+1).compareTo("10")>=0
&&str.substring(i-1,i+1).compareTo("26")<=0){
dp[i] += dp[0];
}
}
return dp[str.length()-1];
}