字符串解码--动态规划
发布日期:2021-05-07 02:59:52 浏览次数:16 分类:精选文章

本文共 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];    }}
上一篇:Java学习 第一个Java程序
下一篇:不同路径2 --动态规划

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年03月22日 11时19分09秒