斐波那契类的问题很容易,递归即可,包括类似的跳台阶类的问题,比较好用也比较合理的办法应该就是动态规划了,会比较节省空间。
- f(n+1) = f(n) + f(n-1)
- 过程:
- 初始化三个整型变量sum,a,b。sum作为辅助变量,使得a,b交替前进。
- 循环求余: (x+y)%p = (x%p + y%p) % p;
- f(n+1)%p = ( f(n)%p + f(n-1)%p ) % p;
- 每次循环中sum=(a+b) % 1000000007;即可代表每次分别取余了。
- 代码:
class Solution {
public int fib(int n) {
int a = 0, b = 1, sum;
for(int i = 0; i < n; i++){
sum = (a + b) % 1000000007;
a = b;
b = sum;
}
return a;
}