變態跳臺階( python實現 )
一、題目描述
題目:變態跳臺階
一隻青蛙一次可以跳上1級臺階,也可以跳上2級 …它也可以跳上 n 級,此時該青蛙跳上一個 n 級的臺階總共有多少種跳法?
二、解題思路
這裏,我們做一個簡單的推導。
因爲青蛙可以跳1級,也可以跳2級…也可以跳n級。
那麼,在 n>2 的前提下,我們分情況討論。
情況 1:若青蛙第一步跳 1 級,剩下 n-1 級,相當於有 f(n-1) 種跳法;
情況 2:若青蛙第一步跳 2 級,剩下 n-2 級,相當於有 f(n-2) 種跳法;
情況 n-1:若青蛙第一步跳 n-1 級,還剩下 1 級,相當於還有 f(1) 種跳法;
情況 n:若青蛙第一步跳 n 級,還剩下 0 級,相當於就 1 種跳法;
最後將以上所有情況加起來,便得到 f(n) 的結果,如下:
其中, 表示求出來的 n 級臺階有多少種跳法 ,例如, 。(當 n = 1,就只有 1 種跳法,即 )
理解了公式 (1),同理也可得到公式 (2),如下:
接下來,公式 (1) 與公式 (2) 做減法,可以得到公式 (3),如下:
到這裏,就不難發現其微妙之處了(哈哈哈,一開始被題目嚇到的我終於放心了)。
根據公式 (3),我們可以將原問題轉化成一個簡單的問題,即 n 級臺階的跳法就是 n-1 級臺階跳法的 2 倍。
當 n = 1 時,只有 = 1 種跳法;
當 n = 2 時,則有 = 2 種跳法( 即 2 (1) );
當 n = 3 時,則有 = 4 種跳法( 即 2 (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
相關題目鏈接: