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()];
    }
};

 

posted @ 2019-03-06 01:40  Joel_Wang  阅读(274)  评论(0编辑  收藏  举报