乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
首先我們考慮最簡單的情況。如果只有1級台階,那麼顯然只一種跳法。如果有2級台階,那就有兩種跳法:一種是分兩次跳,每次跳1級;另一種是一次跳2級。
接著,我們來討論一般情況。我們把n級台階時的跳法看成是n的函式,記為f(n)。當n>2時,第一次跳的時候就有兩種不同的選擇:一是第一次只跳1級,此時跳法數目等於後面剩下的n-1級台階的跳法數目,即為f(n-1);另外一種選擇是跳一次跳2級,此時跳法數目等於後面剩下的n-2級台階的跳法數目,即為f(n-2)。因此n級台階的不同跳法的總數f(n)=f(n-1)+f(n-2)。換個方式考慮跳到n-1時候必須再跳1個台階,到n-2時候必須再跳2個台階。也就是跳n個台階的跳法就是跳n-1的跳法加上跳n-2的跳法。分析到這裡,我們不難看出這實際上就是斐波那契數列了。
# -*- coding:utf-8 -*-
class solution:
def jumpfloor(self, number):
# write code here
# 0,1,2階台階
if number < 3:
return number
first, second, third = 1, 2, 0
# 得到number的跳法,所以是number+1
# 這是遞推:f(n) = f(n-1)+f(n-2)
# 從f(3) = f(2)+f(1) = 1+2,開始
for i in range(3, number+1):
third = first + second
first = second
second = third
return third
《劍指offer》刷題筆記 8 跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 這是一道經典的遞推題目,從第n級台階往回推,由於它可以跳1級台階或者2級台階,所以它上一步必定在第 n 1 或者第 n 2 級台階,也就是說它跳上n級台階的跳法數是跳上n 1和跳上n ...
劍指offer刷題(八)跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 本質上是斐波那契數列。記跳n級台階的跳法有 f n 種,如果最後一次跳了兩級,那麼一共的跳法是 n 2 級台階的跳法,即 f n 2 如果最後一次跳了一級,那麼一共的跳法是 n 1 級...
劍指offer 跳台階
跳台階1 題目 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。思路 遞迴思想 可以理解為前面m步的情況加上最後一步的情況,前面m步理解為,m 1步加上最後一步的情況。最後一步分為2中情況,上1級和上2級。如下 class solution 跳台階2 題目 ...