• 递归+DP:爬楼梯问题


     
     
    一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。

    输入格式:

    首先输入数字n,代表接下来有n组输入,50>=n>=0,然后每行一个数字,代表台阶数,数字为小于60的整数

    输出格式:

    对每一组输入,输出青蛙的跳法。

    输入样例:

    3
    1
    2
    3
    
     
    输出样例:
       1
       2
       3
     
    思路:爬楼梯的方法就是一个斐波那契数列,因为假设最后一步可以跳一次,可以跳两次,那么之前的次数就是相应的F[N-1],F[N-2].

    所以可以使用递归:

     1 int climbStairs(int n) {
     2 
     3         if(n==1||n==2){
     4 
     5             return n;
     6 
     7         }
     8 
     9         return climbStairs(n-1)+climbStairs(n-2);    
    10 
    11    }

    动态规划问题:采用与斐波那契数列相同的做法,不难发现,这个问题可以被分解为一些包含最优子结构的子问题,即它的最优解可以从其子问题的最优解来有效地构建,我们可以使用动态规划来解决这一问题。

     1 int climbStairs(int n)
     2 {
     3     int* iteration;
     4     iteration = (int *)malloc(sizeof(int) * n);
     5     for (int i = 0; i < n; i++)
     6     {
     7         iteration[i] = 0;
     8     }
     9     
    10     iteration[1] = 1;
    11     iteration[2] = 2;
    12     int i = 3;
    13     while (i < n + 1)
    14     {
    15         iteration[i] = iteration[i - 1] + iteration[i - 2];
    16         i++;
    17     }
    18     return iteration[n];
    19 }

    这样时间复杂度是O(N)就可以通过测试。







  • 相关阅读:
    在ant编译java文件时产生debug信息
    Ant里面神奇的fork
    在ant中将依赖jar包一并打包的方法
    Java通过class文件得到所在jar包
    Bat脚本:通过端口号查找进程号
    使用emma时遇到的一些问题
    python之路-day18-反射
    python之路-day17-类与类之间的关系
    python之路-day16-类的成员
    python之路-day15-初识面向对象
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12509335.html
Copyright © 2020-2023  润新知