美文网首页
7.2走楼梯

7.2走楼梯

作者: FiveZM | 来源:发表于2020-04-02 21:10 被阅读0次

有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶,2阶,3阶,请实现一个方法,计算小孩有多少种上楼梯的方式.
为了防止溢出,请将结果模以mod 1000000007

给定一个正整数int n,请返回一个数,代表上楼的方式数.
保证n小于等于100000.



什么是递归,看起来是从上往下处理问题,这是现象,
实际上是从小往上处理问题,这是本质.
执行完最小最小的那个不可分割的问题,然后返回一个数值用于上一层使用,这就是递归的核心思想.

递归解法思路:
最小的不可分割问题有3个
第一个,当台阶n == 0时,此时有1种走法,就是不动.
第二个,当台阶n==1时,有1种走法,即走1步.
第三个,当台阶n==2时,有2种走法,即一步一步上去,或者一下子走两步.

有了这三个基本问题后,剩下的就是类似的子问题.
当n == 3时,如果先走1步,那么就剩下两阶,从这三个基本问题中的n==2可以得出结果,如果要走上第三阶,那么就有2种走法.
如果先走2步,那么就剩下一阶,从这三个基本问题中的n==1中可以得出结果,如果要走上第三阶,有1种走法.
如果先走3步,那么就剩下零阶,从这三个基本问题中的n==0中可以得出结果,即只有1种走法.
那么n == 3时,一共有1+1+2=4种走法,依次类推.
从子问题到大问题,就是递归的思想,每次return返回的都是下面一层的值,返回到上一层来使用

图片.png
    迭代的思想:
    何为之迭代,即在知道循环的次数之后,用循环来实现递归的解法.
第一步就是先初始化基本条件.
第二步,循环,使用基本条件来不断更新下一个循环的值
package _7节;

public class _7_2爬楼梯 {
    public static void main(String[] args) {
        System.out.println(climbFloor(5));
        System.out.println(climbFloor(5));
    }

    /*
        递归
     */
    public static int climbFloor(int n) {
        if (n < 0)
            return 0;
        if (n == 0 || n == 1)
            return 1;
        if (n == 2)
            return 2;
        return climbFloor(n - 1) + climbFloor(n - 2) + climbFloor(n - 3);
    }

    /*
        迭代,即循环,知道循环的次数
     */
    public static int climbFloorDiedai(int n) {
        if (n < 0)
            return 0;
        if (n == 0 || n == 1)
            return 1;
        if (n == 2)
            return 2;
        if (n == 3)
            return 4;
        int n1 = 1;
        int n2 = 2;
        int n3 = 4;

        for (int i = 4; i <= n; i++) {
            int _n1 = n1;
            n1 = n2;
            n2 = n3;
            n3 = ((n1 + n2) % 1000000007 + _n1) % 1000000007;
        }
        return n3;
    }
}

相关文章

  • 7.2走楼梯

    有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶,2阶,3阶,请实现一个方法,计算小孩有多少种上楼梯的方式....

  • 走楼梯——走楼梯(一)

    在介绍动态规划的核心思想前,先看一道题。 LeetCode_70_ClimbingStairs 题目分析: 解法一...

  • 走楼梯——走楼梯系列小总结(八)

    解题步骤 常见优化 非常规优化 相应例题的 Github

  • 走楼梯——二维走楼梯(三)

    LeetCode_62_UniquePaths 题目分析: 解法一:循环-动态规划 解法二:循环-动态规划-内存优...

  • 走楼梯——带权值走楼梯(二)

    LeetCode_746_MinCostClimbingStairs 题目分析: 解法一:递归 解法二:递归-动态...

  • 楼梯走法

    Github

  • 记得走楼梯

    当你无法从一楼蹦到三楼时,不要忘记走楼梯。 学习一种新知识,掌握一种新技能,做到得心应手,熟练应用,真的需要好好下...

  • 走楼梯——二维有障碍走楼梯(五)

    LeetCode_63_UniquePathsII 题目分析: 解法一:循环-动态规划 解法二:循环-动态规划-递...

  • 走不出的楼梯

    午夜,我居然在教室里醒来,硕大的教室空无一人,揉揉眼睛走出楼道,发现好热闹,我们班人比较少,还有好多人平时请...

  • 05 走楼梯(递归)

    题目大意是有n阶楼梯,可以一次走两级,也可以一次走n级。问走到第n阶一共有多少走法。 分析: 这种递归题目一般都是...

网友评论

      本文标题:7.2走楼梯

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