zoukankan      html  css  js  c++  java
  • [LeetCode] Climbing Stairs (DP)

    You are climbing a stair case. It takes n steps to reach to the top.

    Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

    如果用递归的方法,就容易出现Time Limit Exceeded!

    说明:本算法用了动态规划的相关知识。由于递归算法会产生低效的程序,有时我们需要把递归算法写成非递归算法,利用把子问题的答案系统的记录在一个表内,

    ,利用这种技巧的方法就称为动态规划

    我们知道的利用动态规划的例子如:计算斐波那契数列。

    计算斐波那契数列的自然递归程序有很多重复的计算,非常低效,用动态规划计算Fn就可以先把Fn-1和Fn-2记录起来直接用。

    以下用递归的方法,结果是对的,时间超时了,感受一下:

    class Solution {
    public:
        int climbStairs(int n) {
            if(n==1)
              return 1; 
            int num2 = n/2;
            int sum = 0;
            int step1;
            for(int step2=0;step2<=num2;step2++)//共走了step2个2步
            {
                step1 = n - 2*step2;
                sum += summary(step1,step2+1);
            }
            return sum;
        }
    private:
      int summary(int n,int m)//n个苹果放到m个篮子里有几种放法?
        {
            if(m==1 || n==0)
             return 1;
             int sum=0;
            for(int i=0;i<=n;i++)//第1个篮子放i个苹果
            {
                int m1 = summary(n-i,m-1);
                sum+=m1;
                
            }
            
            return sum;
        }
    
    };

    深挖内在联系,"走n步"  = "前面n-1步的基础上再走1步"  +  "n-2步的基础上再走2步",看下面的编码,不用将每一步的结果存到vector<int>里面,那样还要占额外内存:

    class Solution {
    public:
        int climbStairs(int n) {
            if(n==1 || n==2)
               return n;
          int PrePreStep = 1;//n=1
          int PreStep = 2;//n=2
          int res = 0;
          for(int i=3;i<=n;i++)
          {
              
              res = PrePreStep + PreStep;
              PrePreStep = PreStep;
              PreStep = res;
          }
          return res;
        }
    };
  • 相关阅读:
    vue---mixins的用法
    vue---slot,slot-scoped,以及2.6版本之后插槽的用法
    Java实现DDD中UnitOfWork
    redis基础及redis特殊场景使用描述
    网易一千零一夜 读后初感
    产品经理与众不同的思维方式与“职业病”——《人人都是产品经理》
    【Ubuntu14】Nginx+PHP5+Mysql记录
    A标签/按钮防止重复提交&页面Loading制作
    PHPCMS v9 二次开发_验证码结合Session开发
    eclipse 编码设置【转】
  • 原文地址:https://www.cnblogs.com/Xylophone/p/3813042.html
Copyright © 2011-2022 走看看