国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

劍指offer10-I.斐波那契數(shù)列

這篇具有很好參考價值的文章主要介紹了劍指offer10-I.斐波那契數(shù)列。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

劍指offer10-I.斐波那契數(shù)列,劍指offer,算法,leetcode,java

?學(xué)計算機的對這道題肯定不陌生,我記得是學(xué)C語言的時候?qū)W遞歸的時候有這道題,于是我就世界用遞歸寫了如下代碼:

class Solution {
    public int fib(int n) {
        if(n==1) return 1;
        if(n==0) return 0;
        return (fib(n-1) + fib(n-2)) % 1000000007;
    }
}

到n=44就算不出了,超時了。就看了一下題解,題解用的是動態(tài)規(guī)劃的方法:

class Solution {
    public int fib(int n) {
        if(n<2){
            return n;
        }
        int p=0,q=1;int r =0;
        for(int i =2;i<=n;i++){
            r = (p+q) % 1000000007;
            p = q;
            q = r;       
        }
        return r;
    }
}

n小于2的話返回自己,然后定義p為n的前兩個數(shù),q為n的前一個數(shù),然后r是第n個數(shù)的值,所以r就等于p+q,然后把q給p,r給q,最后返回r就可以了。

題解還給出了一種矩陣冪的方法:

劍指offer10-I.斐波那契數(shù)列,劍指offer,算法,leetcode,java

?最后只需要求M的n次方就行。

class Solution {
    static final int MOD = 1000000007;

    public int fib(int n) {
        if (n < 2) {
            return n;
        }
        int[][] q = {{1, 1}, {1, 0}};
        int[][] res = pow(q, n - 1);
        return res[0][0];
    }

    public int[][] pow(int[][] a, int n) {
        int[][] ret = {{1, 0}, {0, 1}};
        while (n > 0) {
            if ((n & 1) == 1) {
                ret = multiply(ret, a);
            }
            n >>= 1;
            a = multiply(a, a);
        }
        return ret;
    }

    public int[][] multiply(int[][] a, int[][] b) {
        int[][] c = new int[2][2];
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 2; j++) {
                c[i][j] = (int) (((long) a[i][0] * b[0][j] + (long) a[i][1] * b[1][j]) % MOD);
            }
        }
        return c;
    }
}

定義了一個矩陣乘矩陣的multiply方法,求矩陣的n次方的pow方法,通過這兩個方法可以求出M的n次方。文章來源地址http://www.zghlxwxcb.cn/news/detail-617727.html

到了這里,關(guān)于劍指offer10-I.斐波那契數(shù)列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【算法學(xué)習(xí)】斐波那契數(shù)列模型-動態(tài)規(guī)劃

    【算法學(xué)習(xí)】斐波那契數(shù)列模型-動態(tài)規(guī)劃

    ? ? ? ? 我在算法學(xué)習(xí)過程中,針對斐波那契數(shù)列模型的動態(tài)規(guī)劃的例題進行了一個整理,并且根據(jù)標(biāo)準(zhǔn)且可靠一點的動態(tài)規(guī)劃解題思路進行求解類似的動歸問題,來達到學(xué)習(xí)和今后復(fù)習(xí)的必要。 ? ? ? ? 所謂的斐波那契數(shù)列模型,即當(dāng)前狀態(tài)的值等于前兩種狀態(tài)的值之和。

    2024年02月04日
    瀏覽(27)
  • 【算法】斐波那契數(shù)列通項公式

    【算法】斐波那契數(shù)列通項公式

    如果數(shù)列 a n a_n a n ? 的遞推公式: a n = c 1 a n ? 1 + c 2 a n ? 2 a_n=c_1a_{n-1}+c_2a_{n-2} a n ? = c 1 ? a n ? 1 ? + c 2 ? a n ? 2 ? ------(1) 根據(jù)待定系數(shù)法,假設(shè) a n ? x a n ? 1 = y ( a n ? 1 ? x a n ? 2 ) a_n-xa_{n-1}=y(a_{n-1}-xa_{n-2}) a n ? ? x a n ? 1 ? = y ( a n ? 1 ? ? x a n ? 2 ?

    2023年04月24日
    瀏覽(17)
  • 【算法】斐波那契數(shù)列與臺風(fēng)的故事

    在小島的一個海濱小鎮(zhèn)上,住著一個名叫蘇菲的女孩。蘇菲一家人靠海為生,她的生活簡單而樸素,與大自然和諧共生。每天,蘇菲都會來到海邊,欣賞那美麗的日出和日落,感受著大海的呼吸。 然而,小島的美麗風(fēng)光并非一成不變。每年夏季,熱帶氣旋活躍,臺風(fēng)頻繁登陸

    2024年02月10日
    瀏覽(25)
  • 3-【斐波那契數(shù)列模型】LeetCode面試題08.01-三步問題

    題目 三步問題。有個小孩正在上樓梯,樓梯有n階臺階,小孩一次可以上1階、2階或3階。實現(xiàn)一種方法,計算小孩有多少種上樓梯的方式。結(jié)果可能很大,你需要對結(jié)果模1000000007。 示例1: 輸入:n = 3? 輸出:4 說明: 有四種走法 示例2: 輸入:n = 5 輸出:13 提示:n范圍在[1, 1000

    2024年02月05日
    瀏覽(18)
  • C語言經(jīng)典算法實例6:斐波那契數(shù)列

    C語言經(jīng)典算法實例6:斐波那契數(shù)列

    斐波那契數(shù)列指的是這樣一個數(shù)列:1,1,2,3,5,8,13,21,34,55,89… 這個數(shù)列從第3項開始,每一項都等于前兩項之和。 斐波那契數(shù)列的定義者,是意大利數(shù)學(xué)家萊昂納多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍貫是比薩。 他被人稱作“比薩的萊昂

    2024年02月02日
    瀏覽(16)
  • C++算法 —— 動態(tài)規(guī)劃(1)斐波那契數(shù)列模型

    C++算法 —— 動態(tài)規(guī)劃(1)斐波那契數(shù)列模型

    每一種算法都最好看完第一篇再去找要看的博客,因為這樣會幫你梳理好思路,看接下來的博客也就更輕松了。當(dāng)然,我也會盡量在寫每一篇時都可以讓不懂這個算法的人也能邊看邊理解。 動規(guī)的思路有五個步驟,且最好畫圖來理解細(xì)節(jié),不要怕麻煩。當(dāng)你開始畫圖,仔細(xì)閱

    2024年02月10日
    瀏覽(23)
  • 【算法優(yōu)選】 動態(tài)規(guī)劃之斐波那契數(shù)列模型

    動態(tài)規(guī)劃相關(guān)題目都可以參考以下五個步驟進行解答: 狀態(tài)表? 狀態(tài)轉(zhuǎn)移?程 初始化 填表順序 返回值 后面題的解答思路也將按照這五個步驟進行講解。 泰波那契序列 Tn 定義如下: T0 = 0, T1 = 1, T2 = 1, 且在 n = 0 的條件下 Tn+3 = Tn + Tn+1 + Tn+2 給你整數(shù) n,請返回第 n 個泰波那契

    2024年02月05日
    瀏覽(25)
  • 一分鐘學(xué)算法-遞歸-斐波那契數(shù)列遞歸解法及優(yōu)化

    一分鐘學(xué)算法-遞歸-斐波那契數(shù)列遞歸解法及優(yōu)化

    一分鐘學(xué)一個算法題目。 今天我們要學(xué)習(xí)的是用遞歸算法求解斐波那契數(shù)列。 視頻教程鏈接:https://www.bilibili.com/video/BV1Wu4y1i7JJ/ 首先我們要知道什么是斐波那契數(shù)列。 斐波那契數(shù)列,又稱黃金分割數(shù)列,是一個經(jīng)典的數(shù)學(xué)數(shù)列,其特點是第一項,第二項為1,后面每個數(shù)字都

    2024年02月11日
    瀏覽(27)
  • 遞歸以及斐波那契數(shù)列遞歸算法和迭代算法的實現(xiàn)與分析

    遞歸以及斐波那契數(shù)列遞歸算法和迭代算法的實現(xiàn)與分析

    程序調(diào)用自身的編程技巧稱為遞歸( recursion) 遞歸有兩個過程,簡單地說一個是 遞的過程 ,一個是 歸的過程 。 遞歸的兩個必要條件 1. 存在限制條件 ,當(dāng)滿足這個限制條件的時候,遞歸便不再繼續(xù)。 2.每次遞歸調(diào)用之后越來越 接近這個限制條件 . 遞歸本質(zhì)就是函數(shù)調(diào)用

    2024年02月12日
    瀏覽(17)
  • Java數(shù)據(jù)結(jié)構(gòu)與算法:動態(tài)規(guī)劃之斐波那契數(shù)列

    大家好,我是免費搭建查券返利機器人賺傭金就用微賺淘客系統(tǒng)3.0的小編。在這寒冷的季節(jié)里,讓我們一同探討Java中的動態(tài)規(guī)劃,重點關(guān)注解決問題的經(jīng)典代表之一——斐波那契數(shù)列。 動態(tài)規(guī)劃簡介 動態(tài)規(guī)劃是一種解決問題的數(shù)學(xué)方法,通常用于優(yōu)化遞歸算法。它通過將問

    2024年01月22日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包