栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

10月1号国庆节,动态规划

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

10月1号国庆节,动态规划

哎,国内都在放假,而我还要考试。。。
再总结一道动态规划题目后去看xgboost.
今天是著名的解码方法II
是从解码方法发展过来的题目。下面列一下做这道动归的经典思路:
他比解码方法I多了下面这段描述:

除了 上面描述的数字字母映射方案,编码消息中可能包含 '’ 字符,可以表示从 ‘1’ 到 ‘9’ 的任一数字(不包括
‘0’)。例如,编码字符串 "1
" 可以表示 “11”、“12”、“13”、“14”、“15”、“16”、“17”、“18” 或 “19”
中的任意一条消息。对 “1*” 进行解码,相当于解码该字符串可以表示的任何编码消息。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/decode-ways-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处

对当前状态进行讨论:对于当前状态的值只有两种可能,一个是自己独立表达一个数,一个是和前面一个一起表达一个数:就此分类讨论:

class Solution:
    def numDecodings(self, s: str) -> int:
        n = len(s)
        dp=[0]*(n+1)
        dp[0]=1
        for i in range(1,n+1):
            if s[i-1]!='*':
                if s[i-1]!='0' :
                    dp[i]+=dp[i-1]
                if i>1 and s[i-2]!='0':
                    if s[i-2]!='*' and int(s[i-2:i]) <=26:
                        dp[i]+=dp[i-2]
                    elif s[i-2]=='*':
                        if int(s[i-1])<=6:
                            dp[i]+=2*dp[i-2]
                        else:
                             dp[i]+=dp[i-2]
            else:
                dp[i]+=9*dp[i-1]
                if i>1 and s[i-2]!='0':
                    if s[i-2]=='1':
                        dp[i]+=dp[i-2]*9
                    elif s[i-2]=='2':
                        dp[i]+=dp[i-2]*6
                    elif s[i-2]=='*':
                        dp[i]+=15*dp[i-2]
        return dp[-1]

结果在"*********"这个例子上出错了。还是审题的问题,mod没有加:

class Solution:
    def numDecodings(self, s: str) -> int:
        MOD=10**9 + 7
        n = len(s)
        dp=[0]*(n+1)
        dp[0]=1
        for i in range(1,n+1):
            if s[i-1]!='*':
                if s[i-1]!='0' :
                    dp[i]+=dp[i-1]
                    dp[i]=dp[i]%MOD
                if i>1 and s[i-2]!='0':
                    if s[i-2]!='*' and int(s[i-2:i]) <=26:
                        dp[i]+=dp[i-2]
                        dp[i]=dp[i]%MOD
                    elif s[i-2]=='*':
                        if int(s[i-1])<=6:
                            dp[i]+=2*dp[i-2]
                            dp[i]=dp[i]%MOD
                        else:
                             dp[i]+=dp[i-2]
                             dp[i]=dp[i]%MOD
            else:
                dp[i]+=9*dp[i-1]
                dp[i]=dp[i]%MOD
                if i>1 and s[i-2]!='0':
                    if s[i-2]=='1':
                        dp[i]+=dp[i-2]*9
                        dp[i]=dp[i]%MOD
                    elif s[i-2]=='2':
                        dp[i]+=dp[i-2]*6
                        dp[i]=dp[i]%MOD
                    elif s[i-2]=='*':
                        dp[i]+=15*dp[i-2]
                        dp[i]=dp[i]%MOD
        return dp[-1]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/283601.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号