java遍历斐波纳契数列_详解循环、迭代、递归、分治(Leet Code 509 斐波那契数列),实际运用...

572ed1cb7ce0aaf6cca2be17732151dd.png

Multiple solutions of Fibonacci (Python or Java)

本章是用英文写的,作为或想成为一名优秀的攻城狮,习惯阅读英文文档将使你受益良多。例如更好的查看最新版的官方文档、与国外友人交流、等等 其实英文的生词也并不多,其中90%的英文都在代码里,当然这其中的精华也在代码里,代码相信大部分伙计还是都可以看懂.所以,请不要惊慌。对于English,让我们一起取克服它、习惯它、拥抱它。然后把它锤倒在地,相信你可以的。 GO, Go, GO 如果实在不行,各种页面翻译来一手。莫慌,这都是小场面,啥都不是事儿,好吧

Violence law(Top-down)

It can be solved directly according to the known conditions (f (0) = 0, f (1) = 1 F(N) = F(N - 1) + F(N - 2), for N > 1)

Python Code

1

2

3

4

class Solution:

def fib(self, N: int) -> int:

if N == 1 or N == 2: return N

return self.fib(N - 1) + self.fib(N - 2)

Java Code

1

2

3

4

5

6

7

8

9

10

11

12

class Solution {

public int fib(int N) {

if (N == 1 || N == 2) return 1;

return fib(N - 1) + fib(N - 2);

}

}

class Solution {

public int fib(int N) {

return N < 2 ? N : fib(N - 1) + fib(N - 2);

}

}

Violence law add cache(Pruning)

We know that if we don’t do any processing, we will repeat too many calculations, which is very bad The processing idea will avoid repeated calculation

Python Code

1

2

3

4

5

class Solution2:

@functools.lru_cache()

def fib(self, N: int) -> int:

if N <= 1: return N

else: return self.fib(N - 1) + self.fib(N - 2)

Java Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class Solution {

private Integer[] cache = new Integer[31];

public int fib(int N) {

if (N <= 1) return N;

cache[0] = 0;

cache[1] = 1;

return memoize(N);

}

public int memoize(int N) {

if (cache[N] != null) return cache[N];

cache[N] = memoize(N-1) + memoize(N-2);

return memoize(N);

}

}

Divide and conquer solution

Recursion, iteration, divide and conquer, backtracking, they do not have a clear distinction Recursion:The core idea is to govern separately and unify the officials

1

2

3

4

5

6

7

class Solution:

def fib(self, N: int) -> int:

memo = {}

if N < 2: return N

if N-1 not in memo: memo[N-1] = self.fib(N-1)

if N-2 not in memo: memo[N-2] = self.fib(N-2)

return memo[N-1] + memo[N-2]

Dynamic recursion(Bottom up)

Basic solutions

More initial value, continuous dynamic recursive

Python Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

class Solution:

def fib(self, N: int) -> int:

if N < 2: return N

dp = [0 for _ in range(N + 1)]

dp[0], dp[1] = 0, 1

for i in range(2, N + 1):

dp[i] = dp[i - 1] + dp[i - 2]

return dp[- 1]

class Solution:

def fib(self, N: int) -> int:

if N == 0: return 0

memo = [0,1]

for _ in range(2,N+1):

memo = [memo[-1], memo[-1] + memo[-2]]

return memo[-1]

Java Code

1

2

3

4

5

6

7

8

9

10

11

12

13

class Solution {

public int fib(int N) {

if (N <= 1) return N;

if (N == 2) return 1;

int curr = 0, prev1 = 1, prev2 = 1;

for (int i = 3; i <= N; i++) {

curr = prev1 + prev2;

prev2 = prev1;

prev1 = curr;

}

return curr;

}

}

Use better base types (tuples) to improve performance

1

2

3

4

5

6

7

class Solution:

def fib(self, N: int) -> int:

if N == 0: return 0

memo = (0,1)

for _ in range(2,N+1):

memo = (memo[-1], memo[-1] + memo[-2])

return memo[-1]

Better solutions

Python Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

class Solution:

def fib(self, N: int) -> int:

curr, prev1, prev2 = 0, 1, 1

for i in range(3, N + 1):

curr = prev1 + prev2

prev2 = prev1

prev1 = curr

return curr

class Solution5:

def fib(self, N: int) -> int:

prev, now = 0, 1

for i in range(N):

prev, now = now, now + prev

return prev

Java Code

1

2

3

4

5

6

7

8

9

10

11

12

13

class Solution {

public int fib(int N) {

if (N == 0) return 0;

if (N == 2 || N == 1) return 1;

int prev = 1, curr = 1;

for (int i = 3; i <= N; i++) {

int sum = prev + curr;

prev = curr;

curr = sum;

}

return curr;

}

}

Mathematical conclusion method

Python Code

1

2

3

4

5

class Solution:

def fib(self, N: int) -> int:

sqrt5 = 5 ** 0.5

fun = pow((1 + sqrt5) / 2, n + 1) - pow((1 - sqrt5) / 2, n + 1)

return int(fun / sqrt5)

Java Code

1

2

3

4

5

6

class Solution {

public int fib(int N) {

double sqrt5 = (1 + Math.sqrt(5)) / 2;

return (int)Math.round(Math.pow(sqrt5, N)/ Math.sqrt(5));

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 二分查找 排序_java 冒泡排序 二分查找

下面这个程序是先定义一个整型数组&#xff0c;然后将其中的元素反序赋值&#xff0c;再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数&#xff0c;返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值&#xff0c;-2表示这个数比这个数组的最小…

php里h和h的区别吗,编码h264h和h264b有什么区别

区别如下&#xff1a;1、版本H.265是新的编码协议&#xff0c;也即是H.264的升级版。H.265标准保留H.264原来的某些技术&#xff0c;同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系&#xff0c;达到最优化设置。2、储…

php 抽象类 静态方法吗,php中的抽象类和静态方法是什么

php中的抽象类是指&#xff1a;在class前加了abstract关键字且存在抽象方法的类&#xff0c;它不能被直接实例化&#xff1b;静态方法是指&#xff1a;被static关键字修饰的方法&#xff0c;静态方法用于操作静态属性。抽象类抽象类是指在 class 前加了 abstract 关键字且存在抽…

centos 怎样下载php,centos下怎样安装软件

centos下安装软件的方法是&#xff1a;centos安装软件的命令1、rpm包的安装1.安装一个包# rpm -ivh2.升级一个包# rpm -Uvh3.移走一个包# rpm -e4.安装参数--force 即使覆盖属于其它包的文件也强迫安装--nodeps 如果该RPM包的安装依赖其它包&#xff0c;即使其它包没装&#xf…

php post 微信沙箱,微信支付平台错误:获取沙箱密钥失败,确保交易密钥是

按官方提示进行获取沙箱密钥的时候&#xff0c;久试不爽&#xff0c;总是提示错误 &#xff1a;“获取沙箱密钥失败&#xff0c;确保交易密钥是否正确”。这个纯粹是微信平台挖的坑呀&#xff0c;文档没有详细的进行一些讲解&#xff0c;也没有提示需要key&#xff0c;下面来说…

linux显示磁盘使用情况命令,Linux中监控磁盘分区和使用情况的几个工具

导读在文章中将讨论Linux中可用于监视磁盘使用情况的命令行实用程序&#xff0c;提供有关总大小容量、已用总量、文件系统信息和分区信息等。让我们看看这些工具如何帮助检索这些信息df命令df是一个Linux命令行实用程序&#xff0c;用于监视Linux磁盘使用情况。df命令显示文件系…

linux网络是文件吗,linux网络配置文件是什么意思

离开了么放得下我么回来了么还会爱我么新兵答主07-22TA获得超过2383个赞网卡的配置&#xff1a;1.网卡配置文件对于网卡信息的配置通常包括&#xff1a;配置IP地址、子网掩码和网关。网卡信息保存在网卡配置文件中。网卡配置文件位于/etc/sysconfig/network-scripts目录下。一块…

cd linux给u盘安装程序,使用U盘安装CDlinux

3、先把u盘插在电脑上与电脑连接&#xff0c;格式化成“FAT”文件系统&#xff0c;更改卷标为“CDLINUX”&#xff0c;之后再打开UltraISO工具进行写入&#xff1a;a、这里把你下载好的CDlinux文件打开。b、点击“写入硬盘映像”c、这里直接默认就好&#xff0c;点击“写入”4、…

zenmap扫描出来linux,如何在Linux上使用NMAP安全扫描器

Nmap是一个免费的开源网络发现和安全审计实用程序&#xff0c;在Linux用户社区中被广泛使用&#xff0c;因为它使用起来非常强大。 Nmap通过在特定目标(通过IP)发送数据包&#xff0c;并通过解释传入的数据包来确定哪些帖子被打开/关闭&#xff0c;扫描系统上运行什么服务&…

c语言小明今年16岁,C语言1.爷爷对小明说:我现在的年龄是你的7倍,过几年是你的6倍,再过若干年就分别是你的5倍,4倍,3倍,2倍.你知道爷爷和小明现在的年龄吗?...

满意答案ta_meng2013.06.15采纳率&#xff1a;49% 等级&#xff1a;12已帮助&#xff1a;5126人#include void main(){int i,j,k;int t60,t50,t40,t30,t20; //用于标记是否达到过这些要求&#xff0c;C语言貌似没有bool类型吧for (i21;i<200;i7) //爷爷的年龄为i{ji/7;…

Android usb 权限广播,android10.0 USB弹窗权限流程解析

USB请求权限流程1. 新建activity&#xff0c;获取UsbManager usbManager (UsbManager) getSystemService(Context.USB_SERVICE)2. 获取所以的USB设备HashMap map usbManager.getDeviceList()3. 过滤别的USB设备&#xff0c;拿到自己USB的USBDevice类&#xff0c;然后请求USB权…

android 仿网易标题栏,仿网易新闻可滑动标题栏TabLayout(文字或图标)

近期有需要&#xff0c;要做一个类似于网易新闻首页中的可滑动标题栏 TabLayout&#xff0c;根据大神写的 FlycoTabLayout 改造了一下&#xff0c;可以加载网络图片&#xff0c;主要实现内容如下&#xff1a;1. 可配置标题选中效果(下划线/上三角/圆角矩形或椭圆)&#xff1b;2…

android 多态如何组件化,Android组件化之子模块之间通信方案

1 背景Android开发中你的模块(Module)一般只有一个app主模块&#xff0c;随着功能不断扩展你会发现一个模块的缺点就是各种业务高度耦合&#xff0c;你就想测试登录模块&#xff0c;那么你可能会把支付模块也编译进去了&#xff0c;代价就是编译耗时&#xff0c;降低效率。大牛…

unity android sd卡路径,一、文件与路径——2、unity路径特点写法和文件读写全攻略...

1、Unity中各路径和目录的对应关系image.png其中&#xff0c;安卓中的路径是有两种分支的image.png在打包面板中&#xff0c;有个Write Access当我们选择Internal Only就是表示沙盒路径&#xff0c;/data/data/com.xxx.xxx/对应的Android方法为 getFilesDir()当我们选择SDCard时…

html 图片行内剧中,HTML入门(转义字符、行内样式和块级元素、定位、锚点、跑马灯标签、图片标签、表格标签的讲解)...

一、转义字符由特殊字符包裹的文本 会当做标签去解析对应不换行空格对应全角空格 em是字体排印学的计量单位&#xff0c;相当于当前指定的点数。其占据的宽度正好是1个中文宽度&#xff0c;而且基本上不受字体影响。<对应<>对应>二、行内元素和块级元素1.块级标签默…

html scale方法的作用,HTML Canvas scale() 方法

实例绘制矩形&#xff0c;放大到 200%&#xff0c;然后再次绘制矩形&#xff1a;YourbrowserdoesnotsupporttheHTML5canvastag.JavaScript&#xff1a;var cdocument.getElementById("myCanvas");var ctxc.getContext("2d");ctx.strokeRect(5,5,25,15);ctx…

html屏幕输出笔记本,笔记本怎样外接显示器 笔记本外接显示器方法【详解】

摘要&#xff1a;笔记本电脑怎样外接显示器?一些用户用惯了大屏台式电脑的朋友&#xff0c;改用笔记本玩游戏&#xff0c;看电影等开始会很不习惯&#xff0c;由于笔记本的屏幕与键盘相比台式机要小上一大截。如果身边有显示器或者液晶电视的话&#xff0c;不妨动手体验下笔记…

江陵中学2021高考成绩查询,2021高考序幕拉开 荆州38080名考生赴考

十年寒窗磨一剑&#xff0c;只待今朝问鼎时&#xff0c;6月7日上午&#xff0c;2021年全国高考正式拉开序幕&#xff0c;荆州3.8万余名考生迎来人生大考。上午8点&#xff0c;在湖北省沙市中学考点周围&#xff0c;不少身着红色送考服的班主任们正在给考生们发放准考证&#xf…

排球制作html,MAYA打造排球建模教程

这篇教程向悠悠之家的朋友们介绍用MAYA打造排球模型的过程&#xff0c;制作很简单&#xff0c;希望对刚学习MAYA建模的朋友们有所帮助&#xff0c;我们先看看最终的效果图&#xff1a;你们一定学过很多创建一个球的技巧&#xff0c;但在这个入门教学里面&#xff0c;我们将要学…

计算机主机箱前后都有什么,目前四种热门的主机机箱设计都有哪些优缺点?

在DIY里面机箱算是最没技术含量的产品之一&#xff0c;不过它却是与DIYer接触时间最长的东西。气味大师每天都会按下机箱开机键&#xff0c;也会空余时间瞄上几眼。机箱确实是对DIY影响最大的产品之一&#xff0c;今天我来盘点一下2018年见过的几个主流机箱设计方案。说是机箱设…