当前位置: 首页 > news >正文

算法51----斐波那契【动态规划】

一、题目:斐波那契算法

给定整数N,返回斐波那契数列的第N项。

递归代码:时间*O(2**N)

def Fal(N):
    if N <= 0:
        return 0
    if N <= 2:
        return 1
    return Fal(N-1) + Fal(N-2)

非递归代码:动态规划:时间O(N),一个一个加和

def Fal(N):
    if N <= 0:
        return 0
    if N <= 2:
        return 1
    stack = [1,1]
    for i in range(3,N+1):
        stack.append(stack[-1]+stack[-2])
    return stack[-1]

非递归代码:时间O(logN),求一个矩阵N次方的值。

斐波那契可转化成矩阵N次方的问题。

 


二、题目:爬楼梯:动态规划:时间O(N)

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶
 

 思路:斐波那契,f(1) = 1,f(2)=2,f(n) = f(n-1)+f(n-2)。

 


三、矩形覆盖

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

思路:

既然是长条形的,那么从后向前,最后一个矩形2*2的,只有两种情况:      

第一种是最后是由一个2*(n-1)的矩形加上一个竖着的2*1的矩形  

另一种是由一个2*(n-2)的矩形,加上两个横着的2*1的矩形  

因此我们可以得出,  

第2*n个矩形的覆盖方法等于第2*(n-1)加上第2*(n-2)的方法。

代码:

    def rectCover(self, number):
        # write code here
        if number == 0:
            return 0
        elif number <= 2:
            return number
        dp = [0] * (number+1)
        dp[1] , dp[2] = 1 , 2
        for i in range(3,number+1):
            dp[i] = dp[i-2] + dp[i-1]
        return dp[-1]

 

转载于:https://www.cnblogs.com/Lee-yl/p/9960761.html

相关文章:

  • 羊皮卷的实践-第二十四章
  • 第二课:PHP 安装
  • 《非真实感图形学》阅读作业
  • 在eclipse怎么用jdk去编译maven项目
  • 系统安全-Man in the middleattack
  • 《实用算法的分析与程序设计》Chapt 2 顺序统计算法与中位数
  • Vue.js-简单的增删查功能
  • 多媒体会议系统中的延迟
  • VForum07之四:布道中国 解读本地化策略
  • SSM框架下实现增加功能
  • pku 2777 Count Color 解体报告
  • Alpha 冲刺 —— 十分之三
  • asp.net URL Rewriter 问题
  • 让TP5.0在SWOOLE上飞起来
  • 让百度和Google搜到你的博客
  • [译] 怎样写一个基础的编译器
  • 2017-09-12 前端日报
  • axios 和 cookie 的那些事
  • es6(二):字符串的扩展
  • extract-text-webpack-plugin用法
  • JavaScript 基础知识 - 入门篇(一)
  • jquery cookie
  • js ES6 求数组的交集,并集,还有差集
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • mysql innodb 索引使用指南
  • VuePress 静态网站生成
  • vue自定义指令实现v-tap插件
  • 多线程事务回滚
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • gunicorn工作原理
  • 如何用纯 CSS 创作一个货车 loader
  • ​2020 年大前端技术趋势解读
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (2)nginx 安装、启停
  • (2020)Java后端开发----(面试题和笔试题)
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (第一天)包装对象、作用域、创建对象
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (汇总)os模块以及shutil模块对文件的操作
  • (简单) HDU 2612 Find a way,BFS。
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (正则)提取页面里的img标签
  • (转)Google的Objective-C编码规范
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .net访问oracle数据库性能问题
  • .net和jar包windows服务部署
  • .NET开源快速、强大、免费的电子表格组件