劍指Offer10 斐波那契數列

2021-10-17 15:45:14 字數 814 閱讀 7535

class

solution

return b;}}

;

2.(最優解)矩陣運算 + 快速冪:o(logn):每次n右移一位,即每次迴圈除2,直至n為0,因此時間為log2 n,o(1):需要兩個矩陣大小;

快速冪:a^n = xi+1(a ^ logn) *… * x3(a ^ 4) * x2(a ^ 2) * x1(a ^ 1) * x0(a ^ 0),其中x序列是指數n的二進位制表示;

矩陣乘法:xn+1 = xn * a = … = x1 * (a ^ n),其中xn+1 = [ an+1,an ],a = [ [1 1 ],[ 1,0 ] ];

class

solution

base, ans;

const

long

long mod =

1e9+7;

//模值

matrix multi

(matrix a, matrix b)

//2*2的矩陣乘法

}return tmp;

}public

:int

fib(

int n)

base =

multi

(base, base)

;//相當於權重變化,1, 2, 4, 8, 16...logn

n >>=1;

}return ans.m[0]

[1];

//[an+1, an] = [a1, a0] * (base^n)}}

;

劍指offer 10 斐波那契數列

遞迴解法 long fibonacci int n 在劍指offer中提到,面試時如果僅僅是做出遞迴的解法,估計是通過不了面試的。我們分析遞迴的過程,以求f 10 為例,需先求f 9 和f 8 要求f 9 需先求f 8 和f 7 我們可以發現在求解的過程中有很多節點是重複計算的,而且計算量是指數遞增...

劍指offer 10 斐波那契數列

寫乙個函式,輸入 n 求斐波那契 fibonacci 數列的第 n 項。斐波那契數列的定義如下 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.斐波那契數列由 0 和 1 開始,之後的斐波那契數就是由之前的兩數相加而得出。答案需要取模 1e9 7 1000000007 如計算初...

劍指offer10動態規劃 斐波那契數列

題目 寫乙個函式,輸入 n 求斐波那契 fibonacci 數列的第 n 項。斐波那契數列的定義如下 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.斐波那契數列由 0 和 1 開始,之後的斐波那契數就是由之前的兩數相加而得出。答案需要取模 1e9 7 1000000007 如...