背包问题的衍生版,唯一的问题在于确定判断时到底要从前还是从后开始计算。
题目大意:1-26对应A-Z加密,给一串数字求解密出来的可能性。
解题思路:
顺序上的注意点有:a.整个字符串的顺序---由于从前往后多了个0很不好操作,所以从后往前操作
b.每一个字母的解码顺序---每次取2位数字开始计算,是否大于26
代码:
public int numDecodings(String s) {
int n = s.length();
if(n==0) return 0;
int[] mem = new int[n+1];
mem[n] = 1;
mem[n-1] = s.charAt(n-1) !='0' ? 1:0;
for(int i=n-2;i>=0;i--)
{
if(s.charAt(i)=='0') continue;
else mem[i] = (Integer.parseInt(s.substring(i,i+2))<=26) ? mem[i+1]+mem[i+2] : mem[i+1];
}
return mem[0];
}