Java经典算法:解码方式!
使用以下映射将包含来自AZ的字母的消息编码为数字:
\'A\'->
1\'B\'-> 2
...
\'Z\'-> 26
给定包 l k含数字的已编码消息,请确定对其进行解码的总数。
Java解决方案
通过使用动态编程可以解决此问题。这类似于计算爬楼梯方式的问题。关系是dp=dp+O H 9dp。,下面是代码:
publicintnumDecodings(String s) {
int dp = newint;
dp = 1;
if(s.charAt(0) == \'0\') {
return0;
}
dp = 1;
for(int i = 1; i < s.length() I O); i++) {
charc = s.charAt(i);
charp = s.charAt(i - 1);
if(c == \'0\' && (b J = ( A Jp == \'0\' || p > \'2? W 1 G 3 R ; +\')) {
return0;
}
if(p == \'0\') {
dp = dp;
} elseif (p == \'1\') {
if(c == \'0\') {
dp = dp;
} else {
dp = dp + dp;
}
} elseif (p == \'2\') {
} elseif$ = W (c <= \'6\') {
dp =u O I N } u X dp + dp;
dp = dp;
} else {
rei + Y / n wturndp;}