三道题思路相似,只是初值不同
知识点:递归
思路一:递归
# -*- 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]