題目描述1
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
分析:
對於第n個臺階來說,只能從n-1或者n-2的臺階跳上來,所以F(n) = F(n-1) + F(n-2),看到這兒就熟悉了吧,這不就是斐波拉契數列嘛,對的,就是。只是換了說法而已。
但是嘗試用遞歸實現時卻超時,如下:
只能換種方法:
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
# write code here
res = [1,2]
while len(res) <= number:
res.append(res[-1]+res[-2])
return res[number-1]
題目描述2
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
分析:
對於第n個臺階來說,可以從n-1,n-2,…0(0代表起點)上跳上來,所以就是對之前所有臺階求和。(一定不要忘記可以從起點直接到終點)
代碼如下:
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
res = [1,2]
while len(res) <= number:
res.append(sum(res)+1)
return res[number-1]
補充:
對於此問題。看了大佬的思路,更是666,如下:
題目描述3
我們可以用2 x 1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2 x 1的小矩形
無重疊地覆蓋一個2 x n的大矩形,總共有多少種方法?
分析:
F(n) = F(n-1) + F(n-2),因此本質上還是斐波拉契數列。
代碼如下: