《劍指offer》面試題10:斐波那契數列、青蛙跳臺階、矩形覆蓋

三道題思路相似,只是初值不同

斐波那契數列 題目描述

知識點:遞歸

思路一:遞歸

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        if n == 0:
            return 0
        if n == 1:
            return 1
        return self.Fibonacci(n-1) + self.Fibonacci(n-2)
        

由於遞歸調用棧耗費內存效率低下,不能在規定時間內通過測試用例

思路二:迭代

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        n_minus_2 = 0
        n_minus_1 = 1
        
    	if n == 0:
            return 0
    	if n == 1:
            return 1
        for i in range(2, n+1):
            num_n = n_minus_1 + n_minus_2
            n_minus_2 = n_minus_1
            n_minus_1 = num_n
            
    	return num_n

在這裏插入圖片描述

青蛙跳臺階 題目描述

思路:

青蛙可以跳一個臺階或者兩個臺階,則當n層臺階時,可以選擇留最後一個臺階,有f(n-1)種跳法,或者留最後兩節臺階,有f(n-2)種跳法,故f(n) = f(n-1) + f(n-2)

遞歸思路,迭代寫法
n == 1: return 1
n == 2: return 2

代碼

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloor(self, number):
        # write code here
        if number == 1:
            return 1
        if number == 2:
            return 2

        n_minus_2 = 1
        n_minus_1 = 2

        for i in range(3, number+1):
            num_n = n_minus_1 + n_minus_2
            n_minus_2 = n_minus_1
            n_minus_1 = num_n

        return num_n

矩形覆蓋 題目描述

思路相同,初值n == 1時爲1,n == 2時爲2

換種寫法:

# -*- coding:utf-8 -*-
class Solution:
    def rectCover(self, number):
        # write code here
        if number == 0:
            return 0
        tempArray = [1,2]
        if number >= 3:
            for i in range(3, number + 1):
                tempArray[(i + 1) % 2] = sum(tempArray)
        return tempArray[(number + 1) % 2]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章