美文网首页
2.9 解题实战:小白上楼梯(递归设计)

2.9 解题实战:小白上楼梯(递归设计)

作者: Aurochsy | 来源:发表于2019-03-22 14:25 被阅读0次

Chapter2: 时间复杂度分析、递归、查找与排序

9. 解题实战:小白上楼梯

题目

小白正在上楼梯,楼梯有n阶台阶,小白一次一次可以上1阶,2阶或3阶,实现一个方法,计算小白有多少种走完楼梯的方式。

算法

递归的解题思路:

  • 找重复

    因为一次可以上1阶,2阶或3阶,要计算到达n阶的方式,为到达n-1,n-2,n-3阶的方式之和

    1. 到达n-1阶之后,只有一种方式到达n阶,即跨1步

    2. 到达n-2阶之后,也只有一种方式到达n阶,即跨2步;跨1步到达n-1阶,再跨一步到达n阶这种方式实际上已经被包含在第1种情况里了

    3. 到达n-2阶之后,只有一种方式到达n阶,即跨3步

  • 找变化

    到达n阶的方式为到达n-1阶,n-2阶,n-3阶的方式之和

    到达n-1阶的方式为到达n-2,n-3,n-4阶的方式之和

    ....

  • 找出口

    n=0时,只有1种

    n=1时,只有1种

    n=2时,有2种

所以设计算法如下

int f(int n){
    if(n==0)
        return 1;
    if(n==1)
        return 1;
    if(n==2)
        return 2;
    return f(n-1)+f(n-2)+f(n-3);
}

相关文章

  • 2.9 解题实战:小白上楼梯(递归设计)

    Chapter2: 时间复杂度分析、递归、查找与排序 9. 解题实战:小白上楼梯 题目 小白正在上楼梯,楼梯有n阶...

  • 小白上楼梯简易递归问题

    题目: 小白正在上楼梯,楼梯共n阶 小白可以一次上1阶,2阶或3阶 计算小白有多少种走完楼梯的方式 样例输入: 3...

  • 15. 反转链表

    解题思路 递归 迭代

  • leetcode第101题:对称二叉树 [否]

    题目描述 考点 递归 二叉树 深度、广度优先搜索 解题思路一:递归方法 代码实现 解题思路二 : 迭代方法 使用队...

  • 2.10 解题实战:旋转数组的最小数字(改造二分法)

    Chapter2: 时间复杂度分析、递归、查找与排序 10. 解题实战:旋转数组中的最小数字(改造二分法) 题目 ...

  • 没有递归解决不了的二叉树问题

    Leetcode上的前120道题的简单题已经几乎做完了,递归数据类型的题还是遇到不少。递归是一种比较优雅的解题方法...

  • LeetCode——二叉树的最大深度

    题目描述 一、CPP 1. 递归法: 解题思路:前序递归遍历,只需递归求左右子树的最大深度时间复杂度:O(n),每...

  • 递归 上楼梯问题

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

  • 05 走楼梯(递归)

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

  • 递归--爬楼梯

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢...

网友评论

      本文标题:2.9 解题实战:小白上楼梯(递归设计)

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