class Solution {
public:
/*
求余运算规则: 设正整数 x,y,p,求余符号为 ⊙ ,则有 (x+y)⊙p=(x⊙p+y⊙p)⊙p。
根据以上规则,可推出 f(n)⊙p=[f(n−1)⊙p+f(n−2)⊙p]⊙p ,从而可以在循环过程中每次计算 sum=(a+b)⊙1000000007
此操作与最终返回前取余等价。
*/
int fib(int n) {
if(n <= 1) return n;
int FibMinus2 = 0;
int FibMinus1 = 1;
int Fib = FibMinus2 + FibMinus1;
for(int i = 2; i <= n; i++) {
Fib = (FibMinus2 + FibMinus1) % 1000000007;
FibMinus2 = FibMinus1;
FibMinus1 = Fib;
}
return Fib;
}
};
剑指 Offer 10- I. 斐波那契数列
最新推荐文章于 2022-03-11 14:51:43 发布