
【leetcode】#509 斐波那契数
发布日期:2021-05-08 11:07:23
浏览次数:20
分类:精选文章
本文共 1103 字,大约阅读时间需要 3 分钟。
文章目录
递归法
原理: 把 f(n)f(n) 问题的计算拆分成 f(n-1)f(n−1) 和 f(n-2)f(n−2) 两个子问题的计算,并递归,以 f(0)f(0) 和 f(1)f(1) 为终止条件。
缺点: 大量重复的递归计算,例如 f(n)f(n) 和 f(n - 1)f(n−1) 两者向下递归需要 各自计算 f(n - 2)f(n−2) 的值。会导致超时,不可用。
记忆化递归法
原理: 在递归法的基础上,新建一个长度为 n 的数组,用于在递归时存储 f(0) 至 (n) 的数字值,重复遇到某数字则直接从数组取用,避免了重复的递归计算。
缺点: 记忆化存储需要使用 O(N) 的额外空间。新建一个数组,每次把计算出的值进行缓存,这样保证每个值只进行一次运算,已计算过的值就从缓存中读取。
class Solution { int[] dp ; public int fib(int n) { init(n); return compute(n); } public int compute(int n ){ if(dp[n]!=-1){ //-1,表示尚未计算过,非-1,表示计算过,直接从缓存中读取即可 return dp[n]; } int c= compute(n-1)+compute(n-2); if(c>1000000007){ c= c%1000000007; } //加入缓存 dp[n] = c; return c; } public void init(int n){ dp = new int[n+1]; if(n==0){ dp[0]=0; return ; } for(int i =1;i<=n;i++){ //初始值为-1,表示未计算值 dp[i]=-1; } dp[1]=1; }}
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年03月26日 05时46分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
android10Binder(一)servicemanager启动流程
2021-05-09
ES6基础之——new Set
2021-05-09
nodeJS实现识别验证码(tesseract-ocr+GraphicsMagick)
2021-05-09
玩玩小爬虫——试搭小架构
2021-05-09
AS与.net的交互——加载web上的xml
2021-05-09
Javascript之旅——第八站:说说instanceof踩了一个坑
2021-05-09
Javascript之旅——第九站:吐槽function
2021-05-09
Javascript之旅——第十一站:原型也不好理解?
2021-05-09
Sql Server之旅——第十站 看看DML操作对索引的影响
2021-05-09
十五天精通WCF——第二天 告别烦恼的config配置
2021-05-09
双十一来了,别让你的mongodb宕机了
2021-05-09
asp.net mvc 之旅 —— 第六站 ActionFilter的应用及源码分析
2021-05-09
Tomcat 热部署
2021-05-09
深入解析 HTTP 缓存控制
2021-05-09
深入浅出访问者模式
2021-05-09
深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍
2021-05-09
百度前端技术学院task16源代码
2021-05-09
解析js中( ( ) { } ( ) )的含义
2021-05-09
js设计模式总结5
2021-05-09
Python大神编程常用4大工具,你用过几个?
2021-05-09