leetcode 91. 解码方法

设dp[i]表示前i个字符可以解码的方法数。

考虑s[i] 

若s[i]=='0' ,那么此时只能考虑让s[i]与s[i-1]组合,如果s[i-1]>'2' 。那么必然无法解码。dp[i]=0; 反之,若s[i-1]==‘1’||  s[i-1]=='2' .

那么,可以dp[i]=dp[i-2] 

若 s[i]>'0'  那么此时可以分两种情况,如果s[i]和s[i-1]可以组合为小于等于26的数,那么dp[i]=dp[i-1]+dp[i-2]

否则,dp[i]=dp[i-1] 

class Solution {
public:
    int numDecodings(string s) {
        int n=s.size();
        int dp[n+3];
        memset(dp,0,sizeof(dp));
        if(s[0]=='0') return 0;
        dp[0]=1;
        dp[1]=1;
        for(int i=2;i<=n;i++)
        {
            if(s[i-1]=='0')
            {
                if(s[i-2]=='1'||s[i-2]=='2')
                {
                    dp[i]=dp[i-2];
                }
                else
                {
                    dp[i]=0;
                }
            }
            else
            {
                if(s[i-2]=='1'||(s[i-2]=='2'&&s[i-1]<='6'))
                {
                    dp[i]=dp[i-1]+dp[i-2];
                }
                else
                {
                    dp[i]=dp[i-1];
                }
            }
        }
        return dp[n];
    }
};

 

你可能感兴趣的:(LeetCode)