剑指offer(C++)——跳台阶

来源:互联网 发布:身份证 差别 知乎 编辑:程序博客网 时间:2024/06/10 19:09

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路:

首先我们考虑最简单的情况。如果只有1级台阶,显然只有一种跳法。如果只有2级台阶,则有两种:一种是一次跳1级,一种是一次跳2级

接着考虑一般情况,对于n级台阶,我们记跳法总数为f(n)。当n>2时,第一次跳有两种选择,一种是跳1级台阶,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种是跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2)。则总的跳法数目为f(n)=f(n-1)+f(n-2)

分析到此,可以看出这实际上就是一个斐波那契数列。

代码如下:

class Solution {public:int jumpFloor(int number) {if (number == 1)return 1;if (number == 2)return 2;long long Floorone = 1;long long Floortwo = 2;long long FloorN = 0;for (int i = 3; i <= number;i++){FloorN = Floorone + Floortwo;Floorone = Floortwo;Floortwo = FloorN;}return FloorN;}};

关于斐波那契数列可参考:http://blog.csdn.net/yf_li123/article/details/70655146

1 0
原创粉丝点击