1.斐波那契数列
题目描述
求斐波那契数列的第 n 项,n <= 39。
解题思路
如果使用递归求解,会重复计算一些子问题。例如,计算 f(10) 需要计算 f(9) 和 f(8),计算 f(9) 需要计算 f(8) 和 f(7),可以看到 f(8) 被重复计算了。考虑到第 i 项只与第 i-1 和第 i-2 项有关,因此只需要存储前两项的值就能求解第 i 项,从而将空间复杂度由 O(N) 降低为 O(1)。
class Solution {
public:
int Fibonacci(int n) {
if(n<=1)
return n;
int f1 = 0;
int f2 = 1;
int fbnq = 0;
for(int i=2;i<=n;i++){
fbnq = f1 + f2;
f1 = f2;
f2 = fbnq;
}
return fbnq;
}
};
python实现
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n=39):
# write code here
f1 ,f2 = 0,1
if n==0:
return 0
elif n==1:
return 1
for i in xrange(2,n+1):
fbnq = f1+f2
f1 = f2
f2 = fbnq
return fbnq
2.跳台阶
题目描述
一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
解题思路
同斐波那契函数
在这里插入代码片