首页 > 其他分享 >以斐波那契分析动态规划

以斐波那契分析动态规划

时间:2022-10-12 15:48:37浏览次数:61  
标签:return int Solution public fib 那契 动态 以斐波 array

递归

最原始的解法,教科书上都是这样写的

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

记忆化递归

用一个数组保存递归的结果
是一自顶向下的解法,是传统递归的改进

class Solution {
    public static int mod = 1000000007;
    public static int[] array = new int[101];//设置一个最大数组,初始值全部为0
    public int fib(int n) {
        if (n == 0) return 0;
        Solution.array[1] = 1;
        if (n == 1) return 1;
        if (Solution.array[n] != 0) return Solution.array[n];
        Solution.array[n] = (fib(n-1)+fib(n-2))%1000000007;
        return Solution.array[n];
    }
}

动态规划

自底向上
空间复杂度为O(n),因为用了一个数组来存数据

class Solution {
    public int fib(int n) {
        if(n == 0) return 0;
        int[] dp = new int[n + 1];
        dp[0] = 0;
        dp[1] = 1;
        for(int i = 2; i <= n; i++){
            dp[i] = dp[i-1] + dp[i-2];
            dp[i] %= 1000000007;
        }
        return dp[n];
    }
}

动态规划(移动数组)

自底向上
是动态规划的优化解法,空间复杂度更低,只使用了2个变量的空间

class Solution {
    public int fib(int n) {
        int mod = 1000000007;
        if(n == 0) return 0;
        if(n == 1) return 1;


        int first =0;
        int second=0;
        int last = 1;

        for(int i = 2;i <= n;i ++){
            first=second;
            second=last;
            last=(first+second)%mod;//每一个数字都要取模,不是在最终结果取模
        }

        return last;
    }
}

标签:return,int,Solution,public,fib,那契,动态,以斐波,array
From: https://www.cnblogs.com/lanhongfu/p/16784724.html

相关文章

  • pfSense使用ddns-go,实现阿里云、腾讯云动态域名解析
    ​​ddns-go​​是一个简单易用的DDNS,能自动更新域名解析到公网IP,支持Alidns(阿里云)、Dnspod(腾讯云)、Cloudflare、华为云、Callback、百度云、porkbun、GoDaddy、Goo......
  • table_control动态列标题文本_
    思路就是把原来的文本字段删掉,换成输入输出字段,然后用变量控制名称,例子如下:取数spfli:DATA: GT_SPFLI   TYPE TABLE OF SPFLI.DATA: GW_SPFLI......
  • 使用txt动态上传数据至库表
    在CBO的程序开发过程中,需要为Table准备大量的测试数据,手动录入效率低,不专业,我们可以采用其他的高级编辑工具(例如:EXCEL,EditPlus)按照Table数据存储结构准备好数据,最后保存......
  • 2819. 动态逆序对
    题目链接2819.动态逆序对对于序列\(A\),它的逆序对数定义为满足\(i<j\),且\(A_i>A_j\)的数对\((i,j)\)的个数。给\(1\)到\(n\)的一个排列,按照某种顺序依次......
  • 算法导论(第15章 动态规划)*
    目录15.1钢条切割自顶向下递归实现使用动态规划方法求解最优钢条切割问题动态规划(dynamicprogramming)与分治方法相似,都是通过组合子问题的解来求解原问题(在这里,“prog......
  • element-ui的form表单验证如何给动态的prop
    <template><el-form:model='queryForm'ref='queryForm'><divv-for="(item,index)inqueryForm.tags"><el-form-item:prop="`tags[${inde......
  • 动态拨号安装Ubuntu系统使用说明
    现有的Ubuntu系统为ubuntu18.04.2版本。安装Ubuntu系统后,使用linux远程信息进行远程连接可用putty、Xshell等工具进行远程连接与Centos系统不同的是,拨号命令的变化,拨号不再......
  • 动态拨号安装系统使用说明
    现有的centos系统包含了6.10版本和7.6版本。安装centos系统后,使用linux远程信息进行远程连接可用putty、Xshell等工具进行远程连接默认是未拨号的状态,是没有网络的,通过pppoe......
  • 数据结构 玩转数据结构 2-7 动态数组
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13412 1重点关注1.1数组动态伸缩参见3.1coding 1.2泛型数组参见3.2......
  • Python之斐波那契数列的实现
    1.斐波那契数列的概念斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这......