算法面試題 :變態跳臺階( python實現 )

變態跳臺階( python實現 )

一、題目描述

題目:變態跳臺階
一隻青蛙一次可以跳上1級臺階,也可以跳上2級 …它也可以跳上 n 級,此時該青蛙跳上一個 n 級的臺階總共有多少種跳法?

二、解題思路

  這裏,我們做一個簡單的推導。

  因爲青蛙可以跳1級,也可以跳2級…也可以跳n級。

  那麼,在 n>2 的前提下,我們分情況討論。

  情況 1:若青蛙第一步跳 1 級,剩下 n-1 級,相當於有 f(n-1) 種跳法;

  情況 2:若青蛙第一步跳 2 級,剩下 n-2 級,相當於有 f(n-2) 種跳法;

  \cdot{}\cdot{}\cdot{}\cdot{}\cdot{}\cdot{}

  情況 n-1:若青蛙第一步跳 n-1 級,還剩下 1 級,相當於還有 f(1) 種跳法;

  情況 n:若青蛙第一步跳 n 級,還剩下 0 級,相當於就 1 種跳法;

  最後將以上所有情況加起來,便得到 f(n) 的結果,如下:

(1)f(n)=f(n1)+f(n2)+...+f(1)+1 f(n) = f(n-1)+f(n-2)+...+f(1) +1\tag{1}

  其中,f(n)f(n) 表示求出來的 n 級臺階有多少種跳法 ,例如,f(1)=1f(1) = 1 。(當 n = 1,就只有 1 種跳法,即 f(1)=1f(1) = 1

  理解了公式 (1),同理也可得到公式 (2),如下:

(2)f(n1)=f(n2)+f(n3)...+f(1)+1f(n-1) = f(n-2)+f(n-3)...+f(1)+1 \tag{2}

  接下來,公式 (1) 與公式 (2) 做減法,可以得到公式 (3),如下:

(3)f(n)=2f(n1)f(n) =2f(n-1) \tag{3}

  到這裏,就不難發現其微妙之處了(哈哈哈,一開始被題目嚇到的我終於放心了)。

  根據公式 (3),我們可以將原問題轉化成一個簡單的問題,即 n 級臺階的跳法就是 n-1 級臺階跳法的 2 倍。

  當 n = 1 時,只有 f(1)f(1) = 1 種跳法;

  當 n = 2 時,則有 f(2)f(2) = 2 種跳法( 即 2 f* f(1) );

  當 n = 3 時,則有 f(3)f(3) = 4 種跳法( 即 2 f* f(2) )。…

  分析到這裏,我們就來看看程序代碼如何實現。

三、代碼實現

  這裏的代碼在 牛客網劍指offer:變態跳臺階 已測試通過,具體如下:

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloorII(self, number):
        # write code here
        if number == 0:
            return 0
        if number == 1:
            return 1
        return_number = 1
        for i in range(2,number+1):
            return_number = return_number * 2
        return return_number

  

相關題目鏈接:

[1] 劍指offer_面試題10 : 斐波那契數列( python實現 )
[2] 個人專欄:算法面試題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章