zoukankan      html  css  js  c++  java
  • 算法复习:递归

    一、斐波那契数列

    面试题10- II. 青蛙跳台阶问题 同 509. 斐波那契数

    #define mods 1000000007
    class Solution {
    public:
        map<int,int>donser;
        int find(int n)
        {
            if(n==0||n==1)
                return 1;
            if(donser[n]!=0)
                donser[n];
            else
                donser[n]=(find(n-1)+find(n-2))%mods;
            return donser[n];
        }
        int numWays(int n) {
            donser[0]=1;
            donser[1]=1;
            find(n);
            return donser[n];
        }
    };
    10

    变态青蛙跳台阶问题

    这次青蛙可以跳的步数从0到N都可以

    class Solution {
    public:
        map<int,int>donser;
        int find(int n)
        {
            if(n==0||n==1)
                return 1;
            if(donser[n]!=0)
                return donser[n];
            else
            {
                for(int i=0;i<n;i++)
                {
                    donser[n]+=find(i);
                }
            }
            return donser[n];
        }
        int jumpFloorII(int number) {
            donser[0]=1;
            donser[1]=1;
            find(number);
            return donser[number];
        }
    };
    变态青蛙跳台阶问题

    二、正则匹配

    leedcode 10. 正则表达式匹配

    递归解法,时间复杂度比较高,后面要尝试改成动规

    bool end_or_not(string p)
    {
        for(int i=0;i<p.size();i+=2)
        {
            if(((p[i]>='a'&&p[i]<='z')||p[i]=='.')&&p[i+1]=='*')
                continue;
            return false;
        }
        return true;
    }
    bool check(string s, string p)
    {
        int donser[27];
        memset(donser,0,sizeof(donser));
        for(int i=0;i<p.size();i++)
        {
            if(p[i]=='.'||p[i]=='*')
                continue;
            if(donser[p[i]-'a']==0)
            {
                donser[p[i]-'a']=1;
                int lable=0;
                if(p[i+1]=='*')
                    continue;
                for(int j=0;j<s.size();j++)
                {
                    if(s[j]==p[i])
                    {
                        lable=1;
                        break;
                    }
                }
                if(lable==0)
                    return false;
            }
        }
        return true;
    }
    class Solution {
    public:
       bool isMatch(string s, string p)
        {
            int ptr_s=0,ptr_p=0;
            bool x=0;
            char now=p[ptr_p],next=p[ptr_p+1];
            if(check(s,p)==false)
                return false;
            if(s[ptr_s]=='')
            {
                return end_or_not(p.substr(ptr_p,p.size()-ptr_p));
            }
            if(p[ptr_p]=='')
                return false;
            if((now>='a'&&now<='z'&&next!='*')||(now=='.'&&next!='*'))
            {
                if(s[ptr_s]==p[ptr_p]&&s[ptr_s+1]==''&&p[ptr_p+1]=='')
                    return true;
                if(s[ptr_s]==p[ptr_p]||(now=='.'&&next!='*'))
                {
                    ptr_s++;
                    ptr_p++;
                    x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                    ptr_s--;
                    ptr_p--;
                    if(x==true)
                        return true;
                }
                else
                {
                    return false;
                }
            }
            if(now=='.'&&next=='*')
            {
                ptr_p+=2;
                x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                ptr_p-=2;
                if(x==true)
                    return true;
                ptr_s++;
                x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                ptr_s--;
                if(x==true)
                    return true;
            }
            if(now>='a'&&now<='z'&&next=='*')
            {
                if(s[ptr_s]!=p[ptr_p])
                {
                    ptr_p+=2;
                    x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                    ptr_p-=2;
                    if(x==true)
                        return true;
                }
                else
                {
                    ptr_p+=2;
                    ptr_s++;
                    x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                    ptr_p-=2;
                    ptr_s--;
                    if(x==true)
                        return true;
                    ptr_s++;
                    x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                    ptr_s--;
                    if(x==true)
                        return true;
                    ptr_p+=2;
                    x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                    ptr_p-=2;
                    if(x==true)
                        return true;
                }
            }
            return false;
        }
    };
    leedcode 10
  • 相关阅读:
    003-代码补全,运行,调试
    002-创建基本项目-新项目、空项目、已有项目
    001-使用idea开发环境安装部署,npm工具栏,脚本运行
    0601-Zuul构建API Gateway-API gateway简介、基础使用、路由配置、负载配置
    005-TCP传输控制协议
    0505-Hystrix保护应用-Turbine集群状态监控
    0504-Hystrix保护应用-Hystrix Dashboard的使用与常见问题总结
    0503-Hystrix保护应用-feign的hystrix支持
    004-java类保存优化
    0502-Hystrix保护应用-简介,使用,健康指标等
  • 原文地址:https://www.cnblogs.com/dzzy/p/12274354.html
Copyright © 2011-2022 走看看