1. 程式人生 > 實用技巧 >《劍指offer》2:青蛙跳臺階

《劍指offer》2:青蛙跳臺階

一.題目:

一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。

二.題目分析

拿到這個題目我們冥思苦想也沒有想到一個好的想法,於是從最簡單的找規律開始吧!

另臺階的級數為n,跳法的數量為ret.

n=1, ret=1

n=2, ret=2

n=3, ret=3

n=4, ret=5

n=5, ret=8

如下圖所示:

從中分析可得ret等於上一個ret的值加上 上上個ret的大小。就如同斐波那契數列一樣,但是這只是一個猜想,具體是不是這樣的呢?

我們換一個思考的方向,讓青蛙從第n個臺階往回跳,記在第n個臺階時可能跳的跳法為f(n)個。假設它往回跳只跳了一格,那麼停留在n-1處,還有f(n-1)種跳法,假設他往回跳了2格,那麼它還具有f(n-2)中跳法,一共就具有這兩種情況,因此f(n)=f(n-1)+f(n-2),這個表示式正好和斐波那契數列的遞迴解法的表示式相同,因此也可以使用同樣的迭代解法來求解這個問題,同時這也證明了我們之前的猜想是正確的。如下圖所示:

三.程式碼實現

程式碼實現就很簡單了,實現和斐波那契數列差不多,如下所示:

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloor(self, number):
        # write code here
        if number<1:
            return 0#在Number小於1的時候
        if number==1:
            return 1
        if number==2:
            return 2
        
        ret
=0 a=1 b=2 for i in range(3,number+1): ret=a+b a=b b=ret return ret

得解,牛客網上顯示: