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