简单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];
}
};