1. 程式人生 > 實用技巧 >【劍指offer】08 跳臺階

【劍指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, num = number-1;
 5     while(num--){
 6         mid+=res;
 7         res=mid-res;
 8     }
 9     return res;
10 }

執行結果