leetcode 91 解码方法
自己终于写出来了,孩子再丑也是自己的,把代码贴着,明天学习一下优秀代码
1 class Solution { 2 public: 3 int numDecodings(string s) { 4 int dp[s.size()+1]; 5 6 dp[0]=1;dp[1]=1; 7 if(s=="") return 0; 8 if(s[0]=='0') return 0; 9 if(s.size()>=2&& s[1]=='0'&&s[0]>'2') return 0; 10 for(int i=2;i<=s.size();i++){ 11 if(s[i-1]=='0'&&(s[i-2]>'2'||s[i-2]=='0')) return 0; 12 if(s[i-1]=='0'){ 13 dp[i]=dp[i-2]; 14 }else{ 15 if(s[i-2]>'2'||(s[i-2]=='2'&&s[i-1]>'6')){ 16 dp[i]=dp[i-1]; 17 }else{ 18 dp[i]=dp[i-1]+dp[i-2]; 19 if(i>=3&&s[i-2]=='0'){ 20 dp[i]=dp[i-1]; 21 } 22 } 23 } 24 25 } 26 return dp[s.size()]; 27 } 28 };
C++动态规划:
class Solution { public: int numDecodings(string s) { int dp[s.size()+1]; dp[0]=1;dp[1]=1; if(s=="") return 0; if(s[0]=='0') return 0; if(s.size()>=2&& s[1]=='0'&&s[0]>'2') return 0; for(int i=2;i<=s.size();i++){ if(s[i-1]=='0'&&(s[i-2]>'2'||s[i-2]=='0')) return 0; if(s[i-1]=='0'){ dp[i]=dp[i-2]; }else{ if(s[i-2]>'2'||(s[i-2]=='2'&&s[i-1]>'6')){ dp[i]=dp[i-1]; }else{ dp[i]=dp[i-1]+dp[i-2]; if(i>=3&&s[i-2]=='0'){ dp[i]=dp[i-1]; } } } } return dp[s.size()]; } };