美文网首页
上台阶问题

上台阶问题

作者: qpan | 来源:发表于2018-03-22 21:55 被阅读112次
  1. 楼梯有100阶台阶,上楼时可以一步上1阶,也可以一步上2阶,问共有多少种走法
    解析:
    我们现在想象自己已经站在第n级台阶上了,那么我们上一个位置只能在第n-1或者n-2级台阶上。比如我们在第3级台阶上,我们上一个位置就在第1或者第2级台阶上。也就是说我们到达第3级台阶有两种情况,分别计算着两种情况并相加即可,即到达第1级台阶的方式数加上到达第2级台阶的方式数,结果等于3。同理到达第n级台阶的放法数就等于到达第n-1级台阶与到达第n-2级台阶数之和。这就是一个递归的过程


    image.png

用递归:

    public static int getCount(int step){
        if (step==1){
            return 1;
        }
        if (step==2){
            return 2;
        }
        return getCount(step-1)+getCount(step-2);
    } 

用循环

public static int getCount2(int step){
        int pre1=1,pre2=2,result=0;
        if (step==1){
            return pre1;
        }
        if (step==2){
            return pre2;
        }
        for (int i=3;i<=step;++i){
            result=pre1+pre2;
            pre1=pre2;
            pre2=result;
        }
        return result;
    }

另外比较下二者的效率(纳秒)

阶梯数 10 20 30
89 10946 1346269
迭代耗时 85416 249843 26615000
循环耗时 4896 4687 7239
  1. 楼梯有100阶台阶,上楼时可以一步上1阶,也可以一步上2阶,也可以一步上3阶,问共有多少种走法
            /          1                    n=1
          /
        /              2                    n=2
f(n)=
        \              4                    n=3
          \
            \ f(n-1)+f(n-2)+f(n-3)          n>=4

用递归:

    public static int getCount(int step){
        if (step==1){
            return 1;
        }
        if (step==2){
            return 2;
        }
        if (step==3){
            return 4;
        }
        return getCount(step-1)+getCount(step-2)+getCount((step-3));
    }

用循环:

 public static int getCount2(int step){
        int pre1=1,pre2=2,pre3=4,result=0;
        if (step==1){
            return pre1;
        }
        if (step==2){
            return pre2;
        }
        if (step==3){
            return pre3;
        }
        for (int i=4;i<=step;++i){
            result=pre1+pre2+pre3;
            pre1=pre2;
            pre2=pre3;
            pre3=result;
        }
        return result;
    }
阶梯数 10 20 30
274 121415 53798080
迭代耗时 126666 431823 219137552
循环耗时 4636 2865 4427

相关文章

  • 上台阶问题

    楼梯有100阶台阶,上楼时可以一步上1阶,也可以一步上2阶,问共有多少种走法解析:我们现在想象自己已经站在第n级台...

  • 上台阶问题

    栗子 有一段楼梯台阶有15级台阶,以小明的脚力一步最多只能跨3级,请问小明登上这段楼梯有多少种不同的走法?() 类...

  • 上台阶问题

    上台阶问题 有n阶台阶(n>0),小明一次可以上一步,或者两步,请问小明有多少种上台阶的方案? 设小明有种上台阶方...

  • 编程笔试-上台阶问题

    题目 已知从山脚到山顶共有m个台阶,一次可爬a-b个台阶,由于年久失修,部分台阶已坏无法站立,已知坏的台阶共有n个...

  • 面试题:上台阶问题

    有次面试被问到这个:n个台阶,一次可以走1步,也可以走2步,有多少种走法。递归实现如下:

  • 动态规划之-上台阶问题

    最近在刷题,碰到了上台阶问题,据说这也是Google的面试题,今天来整理一下。 问题描述 有一楼梯共m级,若每次只...

  • 动态规划2:上台阶问题

    有一个共N级的台阶,一次可以走1级或者2级,问从平地上出发到最高点有多少中走法。 分析: 从终点来看,其走法为倒数...

  • [算法] - 上台阶问题(动态规划)

    1. 问题 有十级台阶,每次只能上一级或者两级,问一共有多少种组合。 2. 代码 3. 参考 漫画:什么是动态规划...

  • 经典DP问题合集

    一、上台阶问题 二、矩阵最小路径和 三、最长递增子序列 四、最长公共子序列 五、背包问题

  • 递归算法:上台阶算法

    1、环境配置: 系统:win10 编程语言:C++ 编译器:DevC++ 2、算法思想: 问题:上台阶问题就是每次...

网友评论

      本文标题:上台阶问题

      本文链接:https://www.haomeiwen.com/subject/alszqftx.html