使用以下映射将包含来自AZ的字母的消息编码为数字:
'A'->
1'B'-> 2
...
'Z'-> 26
给定包含数字的已编码消息,请确定对其进行解码的总数。
Java解决方案
通过使用动态编程可以解决此问题。这类似于计算爬楼梯方式的问题。关系是dp[n]=dp[n-1]+dp[n-2]。,下面是代码:
publicintnumDecodings(String s) {
int[] dp = newint[s.length() + 1];
dp[0] = 1;
if(s.charAt(0) == '0') {
return0;
}
dp[1] = 1;
for(int i = 1; i < s.length(); i++) {
charc = s.charAt(i);
charp = s.charAt(i - 1);
if(c == '0' && (p == '0' || p > '2')) {
return0;
}
if(p == '0') {
dp[i + 1] = dp[i];
} elseif (p == '1') {
if(c == '0') {
dp[i + 1] = dp[i - 1];
} else {
dp[i + 1] = dp[i - 1] + dp[i];
}
} elseif (p == '2') {
} elseif (c <= '6') {
dp[i + 1] = dp[i] + dp[i - 1];
dp[i + 1] = dp[i];
} else {
returndp[s.length()];}
本文暂时没有评论,来添加一个吧(●'◡'●)