剑指–斐波那契数列
1,题目:
2,思路:
思路比较简单,关键的就是:result %= 1000000007。
这里为什么:result %= 1000000007
看下图:
1000000007 是最小的十位质数。模1000000007,可以保证值永远在int的范围内。
也就是不会出现溢出的情况。
3,代码:
class Solution {
public int fib(int n) {
if(n <= 1)
return n;
int nNuM0 = 0;
int nNuM1 = 1;
int result = 0;
for(int i = 2; i <= n; i++){
result = nNuM0+nNuM1;
if(result >= 1000000007)
result -= 1000000007;//或result %= 1000000007;
//常规递归方法超出时间限制,采用下面的方法 注意java中int类型的范围(-2^31~2^31, 2开头的10位数),超出会从最小值重新开始加 可以理解为长度为2的滑动窗口
//模1000000007,可以保证值永远在int的范围内
nNuM0 = nNuM1;
nNuM1 = result;
}
return result;
}
}