斐波那契类问题及循环取余~

540 阅读1分钟

斐波那契类的问题很容易,递归即可,包括类似的跳台阶类的问题,比较好用也比较合理的办法应该就是动态规划了,会比较节省空间。

  • f(n+1) = f(n) + f(n-1)
  • 过程:
  1. 初始化三个整型变量sum,a,b。sum作为辅助变量,使得a,b交替前进。
  2. 循环求余: (x+y)%p = (x%p + y%p) % p;
  3. f(n+1)%p = ( f(n)%p + f(n-1)%p ) % p;
  4. 每次循环中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;
    }