博客
关于我
2020-05-26-力扣刷刷4-面试题10- I. 斐波那契数列
阅读量:330 次
发布时间:2019-03-04

本文共 1008 字,大约阅读时间需要 3 分钟。

在这里插入图片描述

题解一:
动态规划

按照斐波那契数列的数列定义写就行了

1.如果n=0,返回0即可。如果不单独考虑,那么给数组分配空间时会出错。
2定义长度为n+1的数组dp
3.初始化前两个值分别为0,1
4.对于索引i从2到n+1,建立循环:
dp[i]=(dp[i-1]+dp[i-2]) % 1000000007

时间复杂度:O(n),一个循环所用的时间

空间复杂度:O(n),数组dp所占用的空间

python:

class Solution(object):    def fib(self, n):        """        :type n: int        :rtype: int        """        if n==0:           return 0        import numpy as np        dp=np.zeros(n+1,dtype=int)        dp[0]=0        dp[1]=1        for i in range(2,n+1):            dp[i]=(dp[i-1]+dp[i-2]) % 1000000007        return dp[n]

题解二:

动态规划,简化上一题解的空间复杂度

由于dp列表第i项只与第i-1项和第i-2项有关,因此只需初始化三个整型变量sum,a,b,利用辅助变量sum使a,b两数字交替前进即可。sum代表第i项值,a代表第i-1项值,b代表第i-2项值

时间复杂度:O(n),一个循环所用的时间

空间复杂度:O(1),变量sum,a,b所占用的常数空间
java:

class Solution {       public int fib(int n) {           int a=0,b=1,sum;        for(int i=0;i

python:

class Solution(object):    def fib(self, n):        """        :type n: int        :rtype: int        """        a,b=0,1        for _ in range(n):            a,b=b,a+b        return a%1000000007

转载地址:http://phrh.baihongyu.com/

你可能感兴趣的文章
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
查看>>
用 wxPython 打印你的 App
查看>>
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
查看>>
android:使用audiotrack 类播放wav文件
查看>>
聊聊我的五一小假期
查看>>
CSS position属性static/relative/absolute/fixed/sticky用法总结
查看>>
LeetCode:28. 实现 strStr()——————简单
查看>>
Lionheart万汇:布林线双底形态分析技巧
查看>>
数据库三个级别封锁协议
查看>>
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
查看>>
方法重写
查看>>
Java求逆波兰表达式的结果(栈)
查看>>
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
查看>>
SLAM学习笔记-求解视觉SLAM问题
查看>>
普歌-允异团队-HashMap面试题
查看>>
还在一个一个手动安装虚拟机吗?Cobbler自动部署装机一键最小化安装打把游戏就好了
查看>>
程序员应该知道的97件事
查看>>
create-react-app路由的实现原理
查看>>
Linux环境变量配置错误导致命令不能使用(杂谈)
查看>>
openstack安装(九)网络服务的安装--控制节点
查看>>