• leecode 509. 斐波那契数(带备忘录优化和状态转移算法) 4种解法 GOOD


    斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

    F(0) = 0,F(1) = 1
    F(n) = F(n - 1) + F(n - 2),其中 n > 1

    示例 1:

    输入:2
    输出:1
    解释:F(2) = F(1) + F(0) = 1 + 0 = 1

    示例 2

    输入:3
    输出:2
    解释:F(3) = F(2) + F(1) = 1 + 1 = 2

    暴力递归法

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

    使用备忘录递归(有重复计算,记住原来的计算结果 就不用重复计算了)

    class Solution {
        public int fib(int n) {
              //备忘录全初始化为 0
              int [] memo = new int[n+1];
              return helper(memo,n);
        }
    
        private int helper(int [] memo, int n)
        {
            //base case
            if(n==0 || n==1) return n;
            //已经计算过了,不用再计算了
            if(memo[n] != 0) return memo[n];
            memo[n] = helper(memo,n-1) + helper(memo,n-2) ;
            return memo[n];
    
        }
    }

    递归法自顶而下。我们现在来自底向上。

    class Solution {
        public int fib(int n) {
    
            if(n==0) return 0;
            int [] dp = new int[n+1];
            //base case
            dp[0] = 0; dp[1] = 1;
    
            //状态转移
            for(int i =2;i <=n;i++)
            {
                dp[i] = dp[i-1]+dp[i-2];
    
            }
            return dp[n];
        }
    }

     

     再次优化,优化dp空间,步需要那么多存储空间,只要两个就可以了。

    class Solution {
        public int fib(int n) {
    
            //base case
            if(n==0 || n == 1 ) return n;
    
            //自底向上计算  
            //只用两个变量 记忆前两步值
            int prev = 0,curr =1;
            for(int i =2;i <=n;i++)
            {
                int sum = prev+ curr;
                prev = curr;
                curr = sum;
            }
            return curr;
        }
    }
  • 相关阅读:
    MySql msi安装
    C# TextBox文本内容选中
    SQL 删除时间最靠前的几条数据
    Layui表格工具栏绑定事件失效问题
    Layui我提交表单时,table.reload(),表格会请求2次,是为什么?按下面的做
    table 中数据行循环滚动
    html 3D反转效果
    网页电子表数字样式
    power tool 强制撤销
    GHOST -ntexact 正常还原
  • 原文地址:https://www.cnblogs.com/kpwong/p/14655435.html
Copyright © 2020-2023  润新知