【剑指offer】08 跳台阶

题目地址:跳台阶

题目描述                                   

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 64M,其他语言128M

题目示例                                   

示例1:

输入:
1
返回值:
1

示例2:

输入:
4
返回值:
5

解法分析                                   

我记得这好像是一道小学奥数题?当有n节台阶时,如果青蛙最后一步跳一节,那么它跳n-1节台阶时有多少种跳法,跳n节台阶时就有多少种跳法;如果青蛙最后一步跳两节,那么它跳n-2节台阶时有多少种跳法,跳n节台阶时就有多少种跳法。可以看出,跳n节台阶的跳法种类,相当于跳n-1节台阶和跳n-2节台阶跳法的和。

熟悉吧?没错,这就是个斐波那契数列。解法自然跟上一题斐波那契数列一致。

代码                                         

数组+循环:

 1 function jumpFloor(number)
 2 {
 3     // write code here
 4     if(number<=2){
 5         return number;
 6     }else{
 7         var fib = [];
 8         fib[1] = 1;
 9         fib[2] = 2;
10         for(var i=3;i<=number;i++){
11             fib[i]=fib[i-2]+fib[i-1];
12         }
13         return fib[number];
14     }
15 }

循环:

 1 function jumpFloor(number)
 2 {
 3     // write code here
 4     var res = 1, mid = 2;
 5     while(--number){
 6         mid+=res;
 7         res=mid-res;
 8     }
 9     return res;
10 }

执行结果                                   

原文地址:https://www.cnblogs.com/sunlinan/p/14206806.html