青蛙跳臺階 Golang 與 Python 最簡解法

「劍指Offer」裏的經典題目,近期羣裏聊到這題,特來複習一波。python

題目

一隻青蛙一次能夠跳上 1 級臺階,也能夠跳上 2 級臺階。求該青蛙跳上一個 n 級的臺階總共有多少種跳法。code

思路

首先跳到 n 級臺階能夠分解爲兩種狀況:class

  1. 以前跳到 n-1 級臺階,而後再跳 1 級到達 n 級;
  2. 以前跳到 n-2 級臺階,而後再跳 2 級到達 n 級;

所以 n 級跳法數量,等於這兩種狀況之和。
F(n) = F(n-1) + F(n-2)co

同理可繼續推導:
F(n-1) = F(n-2) + F(n-3)
F(n-2) = F(n-3) + F(n-4)
...
F(2) = F(1) + F(0)
F(1) = 1
F(0) = 1block

可見這是斐波那契數列,數列中從第三個數開始,每一個數都是前兩個數之和。那麼只需從 F(0) + F(1) = F(2) 開始計算,一直加到 F(n) 便可得出結果。return

解題

Golang 版

func JumpFloor(n int) int {
    a, b := 1, 1
    for ; n > 0; n-- {
        a, b = b, a + b
    }
    return a
}

Python 版

def jump_floor(n):
    a, b = 1, 1
    for _ in range(n):
        a, b = b, a + b
    return a
相關文章
相關標籤/搜索