1. 题目
2. 思路
(1) BigInteger
- BigInteger类可以存储无限长度的整数并进行运算,从前向后推导,最后取模即可。
(2) 数学法
- 根据数学原理,每次相加就取模与最后再取模的结果是一样的,因此可以每推导一步就取模,防止溢出。
3. 代码
import java.math.BigInteger;
public class Test {
public static void main(String[] args) {
Solution1 solution = new Solution1();
System.out.println(solution.fib(2));
}
}
class Solution {
public int fib(int n) {
BigInteger curResult = new BigInteger("0");
BigInteger nextResult = new BigInteger("1");
while (n > 0) {
nextResult = nextResult.add(curResult);
curResult = nextResult.subtract(curResult);
n--;
}
return curResult.mod(new BigInteger("1000000007")).intValue();
}
}
class Solution1 {
public int fib(int n) {
int f0 = 0;
int f1 = 1;
while (n > 0) {
f1 += f0;
f0 = f1 - f0;
f1 %= 1000000007;
n--;
}
return f0;
}
}