leetcode509 Fibonacci Number

146 阅读1分钟

一 题目

二 代码

  1. 解法一 递归解法
  重复计算了很多子问题,时间复杂度指数级别
    let fib = function(N) {
        if(N===0) return 0;
        if(N===1) return 1;
        return fib(N-1)+fib(N-2);
    };
  1. 动态规划
  利用dp table将每次计算的子问题结果存起来,以防多次重复计算
    let fib=function(N){
        let dp=[];
        dp[0]=0;
        dp[1]=1;
        for(let i=2;i<=N;i++){
            dp[i]=dp[i-1]+dp[i-2];
        }
        return dp[N];
    }
  1. 动态规划升级版
    fib(N)=fib(N-1)+fib(N-2)
    因此每次计算fib(N)只需要fib(N-1)和fib(N-2)即可,那么用两个变量存储这两个值即可,
    就不需要长度为N的数组占用额外空间。把空间复杂度降为1
    let fib=function(N){
        let previous1=0;
        let previous2=1;
        if(N===0) return previous1;
        if(N===1) return previous2;
        for(let i=2;i<=N;i++){
           res=previous1+previous2;
           previous1=previous2;
           previous2=res;
        }
        return res;
    }