简单dp

感觉自己越来越差了==可能本来就是这个水平吧orz

能想到dp[i]=dp[i-1]+dp[i-2]但是写不明白,20+行的代码还要找标称

其实如果想着判断两位字符是用函数封装一下,问题就是so easy

单独一位的不合法的情况只有为'0'

两位的是大于>27

如果遍历到某一位发现dp==0 直接return 0

还是要好好练习呀


class Solution {
public:
    bool exi(string s)
    {
        if(s[0]=='0') return false;
        if(s[0]=='2'&&s[1]>'6') return false;
        if(s[0]>='3') return false;
        return true;
    }
    int numDecodings(string s) {
        int len=s.length();
        if(len==0||s[0]=='0') return 0;
        vector<int>dp(len+1,0);
        dp[0]=1;
        dp[1]=1;
        for(int i=2;i<=len;i++)
        {
            if(s[i-1]!='0')
                dp[i]+=dp[i-1];
            if(exi(s.substr(i-2,2)))
                dp[i]+=dp[i-2];
            if(dp[i]==0)
                return 0;
        }
        return dp[len];
    }
};