自学内容网 自学内容网

Leetcode 91. 解码方法 动态规划

原题链接:Leetcode 91. 解码方法
在这里插入图片描述
在这里插入图片描述
自己写的代码:

class Solution {
public:
    int numDecodings(string s) {
        int n=s.size();
        vector<int> dp(n,1);
        if(s[n-1]=='0') dp[n-1]=0;
        for(int i=n-2;i>=0;i--)
        {
            if(s[i]!='0')
            {
                string t=s.substr(i,2);
                int tmp=atoi(t.c_str());
                if(tmp>=1&&tmp<=26) dp[i]=dp[i+1]+(i+2<n ? dp[i+2]:1);
                else dp[i]=dp[i+1];
            }
            else 
            {
                if(i-1>=0 && (s[i-1]=='1' || s[i-1]=='2'))
                {
                    dp[i]=0;
                    dp[i-1]=dp[i+1];
                    i--;
                }
                else return 0;
            }
        }
        return dp[0];
    }
};

参考别人的代码:Leecode 91. 解码方法
在这里插入图片描述

class Solution {
public:
    int numDecodings(string s) {
        int n=s.size();
        if(s[0]=='0') return 0;
        int res=1,pre=1;
        for(int i=1;i<n;i++)
        {
            int tmp=res;
            if(s[i]=='0')
            {
               if(s[i-1]=='1' || s[i-1]=='2') res=pre;
               else return 0;
            }
            else if(s[i-1]=='1' || (s[i-1]=='2' && s[i]>='1' && s[i]<='6'))
                res+=pre;
            pre=tmp;
        }
        return res;
    }
};



原文地址:https://blog.csdn.net/qq_45791939/article/details/124918044

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!