LeetCode OJ-- Decode Ways **

https://oj.leetcode.com/problems/decode-ways/

对于1 3 2 4 3 1 可以一次选择一个数,或者一次选择两个数进行拆分

使用递推来做,但是有几个情况关于0的,要考虑清楚了。

1. A[0] == '0'  return 0

2. A[1] = 1

3. A[1] == '0' && A[01]<27  A[1] = 1

4. A[1] == '0' && A[01]>27  A[1] = 0

5. A[1] != 0  && A[01]<27  A[1] = 2

6. A[1] != 0  && A[01]>27  A[1] = 1

7. A[n] = A[n-1]+A[n-2]

A[n-1 n] == '0''0'

return 0

当第n位可以自己组成一组的时候,可以加上A[n-1] 即 s[n] != '0'

当第n-1位和第n位可以组成一组的时候,可以加上 A[n-2] 即 s[n-1] != '0' 且 A[n-1 n] <27

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std; 

class Solution {
public:
    int numDecodings(string s) {
        if(s.size()==0)
            return 0;
        
        vector<int> ans;
        ans.resize(s.size());
        if(s[0] == '0' )
            return 0;
        else
            ans[0] = 1;
        if(s.size()>=2)
        {
            if(s[1] == '0')
                if(s[0] <= '2')
                    ans[1] = 1;
                else
                    return 0;
            else 
            {
                if((s[0]-'0')*10 + s[1] - '0' <=26)
                    ans[1] = 2;
                else
                    ans[1] = 1;
            }
            for(int i = 2;i<s.size();i++)
            {
                if(s[i] == '0' && s[i-1] == '0')
                    return 0;
                if(s[i] == '0' && ((s[i-1]-'0')*10 + s[i] - '0' <=26))
                    ans[i] = ans[i-2];
                else if(s[i] == '0' && ((s[i-1]-'0')*10 + s[i] - '0'>26))
                    return 0;
                else if(s[i-1] == '0')
                    ans[i] = ans[i-1];
                else if(((s[i-1]-'0')*10 + s[i] - '0' <=26))
                    ans[i] = ans[i-2] + ans[i-1];
                else
                    ans[i] = ans[i-1];    
            }

        }
        return ans[s.size()-1];
    }
 
};


int main()
{
     
    class Solution mys;
    string in;
    in.push_back('3');
    in.push_back('0');
    in.push_back('1');
    //in.push_back('4');
    cout<<mys.numDecodings(in);
}
原文地址:https://www.cnblogs.com/qingcheng/p/3816053.html