`
caoruntao
  • 浏览: 480812 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

跳台阶问题

 
阅读更多

【转】http://zhedahht.blog.163.com/blog/static/25411174200731844235261/

 

题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。

分析:这道题最近经常出现,包括MicroStrategy等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题。

首先我们考虑最简单的情况。如果只有1级台阶,那显然只有一种跳法。如果有2级台阶,那就有两种跳的方法了:一种是分两次跳,每次跳1级;另外一种就是一次跳2级。

现在我们再来讨论一般情况。我们把n级台阶时的跳法看成是n的函数,记为f(n)。当n>2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种选择是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2)。因此n级台阶时的不同跳法的总数f(n)=f(n-1)+(f-2)

我们把上面的分析用一个公式总结如下:

        /  1                          n=1
f(n)=      2                          n=2
        \  f(n-1)+(f-2)               n>2

分析到这里,相信很多人都能看出这就是我们熟悉的Fibonacci序列。至于怎么求这个序列的第n项,请参考本面试题系列第16,这里就不在赘述了。

分享到:
评论

相关推荐

    青蛙为什么要跳台阶?C语言趣解青蛙跳台阶问题.pdf

    青蛙跳台阶问题是典型的动态规划问题,它涉及的是计数问题。在C语言领域,此问题常用于演示如何通过递归及动态规划的方法来求解。 1. 青蛙跳台阶问题基础: - 在基础版本的青蛙跳台阶问题中,青蛙每次可以跳上1级...

    青蛙跳台阶问题1

    青蛙跳台阶问题是一个经典的动态规划问题,也与斐波那契数列有一定的联系。在这个问题中,我们假设一只青蛙要跳上一个具有 n 级台阶的楼梯,每次它可以跳 1 级或者 2 级。我们需要找出到达最高台阶的所有不同跳法的...

    vfmh#JAVA2020#面试题10- II. 青蛙跳台阶问题1

    面试题10- II. 青蛙跳台阶问题题目链接面试题10- II. 青蛙跳台阶问题题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。示例 1:输入:n =

    使用C++递归求解跳台阶问题

    跳台阶问题是一个经典的计算机科学问题,它涉及到递归算法的运用。在本问题中,一个楼梯有 n 级台阶,每次跳跃可以跳 1 级或 2 级。目标是找出到达顶层有多少种不同的跳法。这个问题可以通过数学分析和递归算法来...

    c语言 跳台阶问题的解决方法

    跳台阶问题是一个经典的动态规划和递归问题,在C语言中可以通过循环或递归的方式来解决。这个问题的基本设定是:有一个含有n级台阶的楼梯,每次可以跳1级或2级,求解到达顶部的不同跳法数量。 首先,我们可以观察到...

    【算法题】青蛙跳台阶问题(附过程取模证明)

    青蛙跳台阶问题是一个经典的动态规划问题,也与斐波那契数列有一定的联系。这个问题描述的是,一只青蛙要跳上一个包含 n 级台阶的楼梯,每次它可以跳1级或者2级。我们需要找出到达第 n 级台阶的所有可能跳法的数量,...

    rrain7#nothing#面试题10- II. 青蛙跳台阶问题1

    一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。链接:

    利用简洁的C语言代码解决跳台阶问题与约瑟夫环问题

    跳台阶问题和约瑟夫环问题都是经典的计算机科学算法题目,常常出现在编程竞赛或面试中。下面我们将分别探讨这两个问题的解决方案以及它们的C语言实现。 **跳台阶问题**: 这是一个典型的动态规划或递归问题。给定一...

    stronglxp#learnNote#剑指Offer10-II.青蛙跳台阶问题1

    定义dp[i]表示跳上一个i级台阶的跳法数,则dp[0] = dp[1] = 1,对于任意i(i >=2),跳上i级台阶可以通过跳1级或者跳2级到达,所以dp

    linxid#Leetcode_Python#面试题10- II. 青蛙跳台阶问题1

    题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21解析1:本质是DP,对DP进行了拆

    Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法

    这篇文章主要介绍了在Python语言中解决三个经典的递归问题:跳台阶问题、变态跳台阶问题以及矩形覆盖问题。这三个问题虽然描述不同,但实际上都可以归结为斐波那契数列的变种。通过示例代码的形式,作者详细地介绍了...

    php中青蛙跳台阶的问题解决方法

    在给出的代码示例中,展示了两种解决青蛙跳台阶问题的方法。第一种方法是递归版本的JumpFloor函数,第二种方法是非递归版本的。递归方法简洁但效率不高,因为它会重复计算很多子问题;而非递归方法则效率更高,因为...

    html5实现经典的变色弹珠跳台阶游戏源码

    html5实现经典的变色弹珠跳台阶游戏源码 html5实现经典的变色弹珠跳台阶游戏源码

    【Python学习-递归-斐波那契数列】【剑指offer】之跳台阶

    这个问题的解决方案可以借鉴斐波那契数列的思路,因为跳台阶问题也遵循类似的规律:到达第n级台阶的方法数等于到达第n-1级和第n-2级的方法数之和。 在描述中提到的“变态跳台阶”问题,其实是一个拓展,青蛙不仅...

    变色弹球跳台阶HTML5源码

    【变色弹球跳台阶HTML5源码】是一款基于HTML5、JavaScript开发的前端小游戏,它结合了HTML5 Canvas技术和JavaScript编程,展示了HTML5在游戏开发领域的应用潜力。Canvas是HTML5的一个重要组成部分,它允许开发者在...

    js代码-200607-跳台阶(DP)

    跳台阶问题是一个经典的动态规划问题,通常的描述是:一个人站在一个有n级台阶的地方,每次可以跳1级或2级台阶,问有多少种不同的跳法到达最后一级。这是一个递归问题,但通过动态规划可以避免重复计算,提高效率。 ...

Global site tag (gtag.js) - Google Analytics