题目:一个台阶总共有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序列,在11里面有讲。
发表评论
-
析构函数为虚函数的原因
2012-09-09 11:42 830我们知道,用C++开发的时候,用来做基类的类的析构函数 ... -
hash的应用
2012-08-31 23:02 959第一部分为一道百度面试题Top K算法的详解;第二部分为关 ... -
微软智力题
2012-08-29 19:59 565第一组1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有 ... -
C++不能被继承的类
2012-08-27 20:16 1055一个类不能被继承, ... -
括号对齐问题
2012-08-27 10:47 1407解法一:左右括号成一对则抵消 可以 ... -
树的遍历
2012-08-19 10:43 717/****************************** ... -
堆排序
2012-08-16 14:24 882堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全 ... -
多态赋值
2012-08-14 16:16 828#include <iostream> usi ... -
static变量与static函数(转)
2012-08-13 10:15 744一、 static 变量 static变量大致分为三种用法 ... -
不用sizeof判断16位32位
2012-08-10 15:21 1701用C++写个程序,如何判断一个操作系统是16位还是3 ... -
找出连续最长的数字串(百度面试)
2012-08-09 15:15 1144int maxContinuNum(const char*in ... -
顺序栈和链栈
2012-08-06 10:01 796顺序栈:话不多说直接上代码 #include ... -
队列的数组实现和链表实现
2012-08-05 16:20 1023话不多少,数组实现上代码: #include<i ... -
KMP算法详解
2012-08-02 21:40 880KMP算法: 是在一个“主文本字符串” ... -
字符串的最长连续重复子串
2012-08-01 15:05 9768两种方法: 循环两次寻找最长的子串: <方法一> ... -
寻找一个字符串连续出现最多的子串的方法(转)
2012-07-31 21:19 974算法描述首先获得后缀数组,然后1.第一行第一个字符a,与第二行 ... -
字符串的循环移位
2012-07-31 16:52 974假设字符串:abcdefg 左循环两位:cdefgab 右 ... -
一次谷歌面试趣事(转)
2012-07-31 15:26 764很多年前我进入硅谷 ... -
约瑟夫环问题(循环链表)
2012-07-30 21:31 1287题目描述:n只猴子要选大王,选举方法如下:所有猴子按 1, ... -
面试之单链表
2012-07-30 20:18 7261、编程实现一个单链表的建立/测长/打印。 ...
相关推荐
青蛙跳台阶问题是典型的动态规划问题,它涉及的是计数问题。在C语言领域,此问题常用于演示如何通过递归及动态规划的方法来求解。 1. 青蛙跳台阶问题基础: - 在基础版本的青蛙跳台阶问题中,青蛙每次可以跳上1级...
青蛙跳台阶问题是一个经典的动态规划问题,也与斐波那契数列有一定的联系。在这个问题中,我们假设一只青蛙要跳上一个具有 n 级台阶的楼梯,每次它可以跳 1 级或者 2 级。我们需要找出到达最高台阶的所有不同跳法的...
html5实现经典的变色弹珠跳台阶游戏源码 html5实现经典的变色弹珠跳台阶游戏源码
在这款游戏中,用户通过控制弹球跳跃,避开障碍物,每跳上一个台阶,弹球的颜色会发生变化,增加了游戏的趣味性和挑战性。游戏的核心机制包括以下几个方面: 1. **HTML5 Canvas**:Canvas是一个二维绘图上下文,...
这篇文章主要介绍了在Python语言中解决三个经典的递归问题:跳台阶问题、变态跳台阶问题以及矩形覆盖问题。这三个问题虽然描述不同,但实际上都可以归结为斐波那契数列的变种。通过示例代码的形式,作者详细地介绍了...
面试题10- II. 青蛙跳台阶问题题目链接面试题10- II. 青蛙跳台阶问题题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。示例 1:输入:n =
在这个“HTML5变色弹球跳台阶小游戏”中,我们看到的是HTML5与JavaScript(JS)相结合的一个典型应用,特别是标签中的"JS特效-其它代码"暗示了这个游戏主要依赖于JavaScript来实现各种动态效果。 首先,游戏的核心...
【jQuery变色弹珠跳台阶小游戏代码.zip】是一款基于JavaScript库jQuery实现的趣味互动小游戏。游戏的核心在于通过用户点击台阶,使台阶颜色在红色、黄色和紫色之间切换,同时一个虚拟的弹珠会根据用户的点击顺序跳跃...
跳台阶问题是一个经典的计算机科学问题,它涉及到递归算法的运用。在本问题中,一个楼梯有 n 级台阶,每次跳跃可以跳 1 级或 2 级。目标是找出到达顶层有多少种不同的跳法。这个问题可以通过数学分析和递归算法来...
跳台阶问题是一个经典的动态规划和递归问题,在C语言中可以通过循环或递归的方式来解决。这个问题的基本设定是:有一个含有n级台阶的楼梯,每次可以跳1级或2级,求解到达顶部的不同跳法数量。 首先,我们可以观察到...
问题的背景是有一只青蛙,它能一次跳1级或2级台阶,问跳上n级台阶有多少种跳法。这个问题与著名的斐波那契数列(Fibonacci sequence)紧密相关。 首先,我们来分析这个问题的规律。当台阶数n为1时,只有一种跳法;...
青蛙上台阶所有解 兔子繁殖问题 斐波那契数列
青蛙跳台阶问题是一个经典的动态规划问题,也与斐波那契数列有一定的联系。这个问题描述的是,一只青蛙要跳上一个包含 n 级台阶的楼梯,每次它可以跳1级或者2级。我们需要找出到达第 n 级台阶的所有可能跳法的数量,...
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。链接:
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21解析1:本质是DP,对DP进行了拆
定义dp[i]表示跳上一个i级台阶的跳法数,则dp[0] = dp[1] = 1,对于任意i(i >=2),跳上i级台阶可以通过跳1级或者跳2级到达,所以dp
跳台阶问题和约瑟夫环问题都是经典的计算机科学算法题目,常常出现在编程竞赛或面试中。下面我们将分别探讨这两个问题的解决方案以及它们的C语言实现。 **跳台阶问题**: 这是一个典型的动态规划或递归问题。给定一...