剑指offer二刷——数组专题——斐波那契数列
题目描述
n<=39
我的想法
斐波那契数列定义:F(0)=0,F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
创建一个初始数组nums,大小为n+1,定义nums[0]=0, nums[1]=1, nums[2]=1。
从nums[3]开始依次以前两位数相加得到计算结果,直到得到nums[n],返回该结果。
# -*- coding:utf-8 -*- 解法一
class Solution:
def Fibonacci(self, n):
# write code here
if n>39:return
nums=[1]*(n+1)
nums[0]=0
for i in range(3,n+1):
nums[i]=nums[i-1]+nums[i-2]
return nums[n]
时间复杂度o(n), 空间复杂度o(n)
参考了牛客网官方解答中“记忆化搜索”的解题思路,利用大小为2的数组“折叠式”地计算F(n),减小了空间复杂度。
这里复习一下判断奇数偶数的方法:
# -*- coding:utf-8 -*- 解法二
class Solution:
def Fibonacci(self, n):
# write code here
if n>39:return
if n==0 or n==1:return n
a=[0,1]
for i in range(2,n):
if i&1==1: a[1]=a[0]+a[1]
else: a[0]=a[0]+a[1]
return a[0]+a[1]
时间复杂度o(n), 空间复杂度o(1)
与解法二相同思路的另一种解法,不用数组
# -*- coding:utf-8 -*- 解法三
class Solution:
def Fibonacci(self, n):
# write code here
if n>39:return
if n==0 or n==1:return n
a,b,c=0,1,1
for i in range(2,n):
c=a+b
a=b
b=c
return a+b
时间复杂度o(n), 空间复杂度o(1)
没想到的解法
一、递归
F(n)=F(n - 1)+F(n - 2),有这个公式就说明此题可以用递归方法得出。
只不过递归解法的时间复杂度和空间占用过高,不适合作为此题的解法,但是这种思路还是要知道的。
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
if n>39: return
if (n==1 or n==2): return 1
return self.Fibonacci(n-1)+self.Fibonacci(n-2)
剑指offer二刷——数组专题——斐波那契数列的更多相关文章
- C#版 - 剑指offer 面试题9:斐波那契数列及其变形(跳台阶、矩形覆盖) 题解
面试题9:斐波那契数列及其变形(跳台阶.矩形覆盖) 提交网址: http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tp ...
- 剑指Offer面试题:8.斐波那契数列
一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
- 剑指offer-第二章算法之斐波拉契数列(青蛙跳台阶)
递归与循环 递归:在一个函数的内部调用这个函数. 本质:把一个问题分解为两个,或者多个小问题(多个小问题相互重叠的部分,会存在重复的计算) 优点:简洁,易于实现. 缺点:时间和空间消耗严重,如果递归调 ...
- 【剑指offer】面试题 10. 斐波那契数列
面试题 10. 斐波那契数列 题目一:求斐波那契数列的第n项 题目描述:求斐波拉契数列的第n项 写出一个函数,输入n,求斐波拉契(Fibonacci)数列的第n项.斐波拉契数列定义如下: C++ 实现 ...
- 剑指Offer面试题:7.斐波那契数列
一 题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二 效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
- 《剑指offer》面试题9 斐波那契数列 Java版
书中方法一:递归,这种方法效率不高,因为可能会有很多重复计算. public long calculate(int n){ if(n<=0){ return 0; } if(n == 1){ r ...
- 剑指offer 7. 递归和循环 斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 简简单单 废话不多说,直接上代码: public class Sol ...
- 剑指offer——面试题10:斐波那契数列
个人答案: #include"iostream" #include"stdio.h" #include"string.h" using na ...
- 剑指Offer(书):斐波那契数列
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 分析:第一种方法:递归,45时,时间为5s,50时,我就等不及了.原因是重 ...
随机推荐
- Docker - 解决同步容器与主机时间报错:Error response from daemon: Error processing tar file(exit status 1): invalid symlink "/usr/share/zoneinfo/UTC" -> "../usr/share/zoneinfo/Asia/Shanghai"
问题背景 这里讲解了如何同步容器和主机的时间:https://www.cnblogs.com/poloyy/p/13967532.html 其中使用方法二 docker cp /etc/localti ...
- 浅析TCP协议---转载
https://cloud.tencent.com/developer/article/1150971 前言 说到TCP协议,相信大家都比较熟悉了,对于TCP协议总能说个一二三来,但是TCP协议又是一 ...
- 第二章epoll
epoll_create:函数实现分析 /* * Open an eventpoll file descriptor. */ SYSCALL_DEFINE1(epoll_create1, int, f ...
- linux tcp/ip 参数解析
后面整理相关信息/* * TCP option lengths */#define TCPOLEN_MSS 4 //只能出现在SYN段中#define TCPOLEN_W ...
- Markdown语法+Typora快捷键
1. Markdown语法 1.1 代码块生成 // 对于代码块,使用"```+编程语言"即可生成书写对应代码块的区域 // JS代码块 ```javascript // Jav ...
- 怎样禁止Ceph OSD的自动挂载
前言 本篇来源于群里一个人的问题,有没有办法让ceph的磁盘不自动挂载,一般人的问题都是怎样让ceph能够自动挂载,在centos 7 平台下 ceph jewel版本以后都是有自动挂载的处理的,这个 ...
- Python_网络编程_socket()
什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. 详细资 ...
- USACO 2020 OPEN Favorite Colors【并查集-启发式合并-思考】
题目链接 题意简述 仰慕喜欢同色奶牛的奶牛喜欢同色 (禁止套娃 ,求一种方案,奶牛喜欢的颜色种数最多,多种方案求字典序最小. 题目解析 这道题我最先想到的居然是二分+并查集,我在想啥 咳咳 首先,考虑 ...
- IAR_STM32_BootLoader
1.STM32 Bootloader与APP IROM中可以分成两个区域,起始代码运行地址为0x08000000,这是基本固定的,可以将IROM的0x08000000 ~ 0x08002000这8KB ...
- 新同事不讲“码”德,这SQL写得太野了,请耗子尾汁~
今天来分享几个MySQL常见的SQL错误(不当)用法.我们在作为一个初学者时,很有可能自己在写SQL时也没有注意到这些问题,导致写出来的SQL语句效率低下,所以我们也可以自省自检一下. 1. LIMI ...