青蛙跳(遞歸)

題目描述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),因此本質上還是斐波拉契數列。
代碼如下:
在這裏插入圖片描述

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