三道題思路相似,只是初值不同
知識點:遞歸
思路一:遞歸
# -*- 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]