• 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);
    }
  • 相关阅读:
    转载 listview的一种常用布局
    转载 Android gallery实现图片的左右循环旋转
    转载 android 所有布局属性和UI控件
    转载 android 支持展开/收缩功能的列表控件
    svn实现文件/目录的共享
    linux 下命令行修改IP地址
    oracle 10g数据库闪回配置与使用
    Oracle数据库实例启动不了怎么办?
    oracle 权限列表
    apache 配置虚拟目录
  • 原文地址:https://www.cnblogs.com/qingcheng/p/3816053.html
Copyright © 2020-2023  润新知