本文共 1087 字,大约阅读时间需要 3 分钟。
class Solution { public int numDecodings(String s) { /* 动态规划: 我们解密字符串的方式 前i个指的是 0 到 i-1 设总共有i个字符 s的前i个字符的解密方式有:最后一个字符为下表i-1 1.最后一个字符进行解密方式 + 前i-1个字符进行解密的和(0到 i-2) 前提下标i-1的字符可以正常解密 2.最后两个字符进行解密 + 前i-2个字符进行解密的和(0到i-3) 前提下标i-1 和下表 i-2 拼起来的字符可以正常解密 因为这种计算的时候第 i-1 或者 第i-2 个的字符已经确定了解密方式 所以我们前i个字符的解密方式 = 前i-1个字符串的解密方式 + 前i-2个字符串的解密方式 的 和 序列型 我们考虑前多少。。。 初始条件 f[0] = 1; 含义是 空串只有一种解密方式 就是空 */ char[] chars = s.toCharArray(); int n = chars.length; if(n ==0 ) return 0 ; int f[] = new int[n+1]; f[0] = 1; for(int i = 1 ; i <= n ; i++){ f[i] = 0 ; int temp = chars[i-1] - '0' ; if(temp >0 && temp <= 9){ //看最后一个字符能否凑成一个解密 f[i]+=f[i-1]; } if(i>=2){ //看最后两个字符能够凑成一个解密 temp = (chars[i-2]-'0')*10 + chars[i-1] - '0' ; } if(temp >=10 && temp <=26){ f[i]+=f[i-2]; } } return f[n]; }}
转载地址:http://xeeq.baihongyu.com/