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堆内存与栈内存区别

栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量. 在java中,所有基本类型和引用类型都在栈中存储.栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域).栈的优势是&#xff0c;存取速度比堆要快&#xff0c;仅次于直接位于CPU中的寄存…

主页面功能的java_6-04-项目实战-主页面显示当前用户退出功能实现

教程列表&#xff1a;1-01-servlet学习-HTTP协议的概念作用和特点1-02-servlet学习-HTTP协议的交互流程和请求格式和请求方式1-03-servlet学习-HTTP协议的响应格式和常见状态码1-04-servlet学习-服务器介绍&tomcat服务器的安装和验证1-05-servlet学习-第一个web项目1-06-se…

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

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

php 数组设置为空,PHP数组设置空值

如果没有数据存在&#xff0c;如何将数组值设置为null&#xff1f;PHP数组设置空值以下是我的PHP阵列和我JSON编码 -{"title":"Impalz-Marketing","type":"Business Details","version":"1.0","login":…

什么是写一个java类,Java什么是类?class的相关介绍

本章给大家带来Java什么是类&#xff1f;class的相关介绍&#xff0c;让大家了解关于类(class)的一些知识。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。class Point{constructor(){}toString(){}}console.log(Object.keys(Point.prot…

windows php sqlite,如何在Apache 2.4(Windows 7)上为PHP 5.6.14配置SQLite3?

我在Windows 7上,在Apache 2.4上使用PHP 5.6.14版,我正在尝试访问SQLite3数据库.我正在……致命错误&#xff1a;找不到类“SQLite3”在这里你是一个简单的PHP代码…$db new SQLite3(phpdb);if ($db) {$db->query("CREATE TABLE dogbreeds (Name VARCHAR(255), MaxAge…

php 国密 签名,关于php国密SM3签名算法

推荐&#xff1a;《PHP视频教程》php国密SM3签名算法代码地址github.com/lizhichao/sm安装composer require lizhichao/one-sm使用require __DIR__ . /vendor/autoload.php; // 字符串签名 echo OneSmSm3::sign(abc) . PHP_EOL; echo OneSmSm3::sign(str_repeat("adfas哈哈…

matlab状态方程 传递函数 可控性,实验一matlab系统的传递函数和状态空间表达式的转换...

实验一 MATLAB 系统的传递函数和状态空间表达式的转换一、 实验目的1、学习多变量系统状态空间表达式的建立方法&#xff1b;2、通过编程、上机调试&#xff0c;掌握多变量系统状态空间表达式与传递函数之间相互转换的方法&#xff1b;3、掌握相应的MATLAB 函数。二、 实验原理…

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

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

mysql5.1怎么备份,MySQL 5.1升级到MySQL 5.5的步骤

mysql 5.5已经出来有一段时间&#xff0c;性能有明显提升&#xff0c;特别是对多核CPU的支持与TPS性能的提升。上周博主介绍了linux下编译安装mysql 5.5的步骤&#xff0c;安装不出意外基本没有问题。不过可能很多朋友和我一样一直用的是mysql 5.1&#xff0c;现在想把数据库升…

php file del 方法,php怎么遍历文件删除指定字符

php遍历文件删除指定字符的实现方法&#xff1a;首先创建一个PHP示例文件&#xff1b;然后通过“function del($getstr){…}”方法删除指定目录下所有指定文件中指定字符串即可。本文操作环境&#xff1a;windows7系统、PHP7.1版&#xff0c;DELL G3电脑php实现遍历目录并删除指…

event类型 php,深入解析PHP的Laravel框架中的event事件操作

有时候当我们单纯的看 Laravel 手册的时候会有一些疑惑&#xff0c;比如说系统服务下的授权和事件&#xff0c;这些功能服务的应用场景是什么&#xff0c;其实如果没有经历过一定的开发经验有这些疑惑是很正常的事情&#xff0c;但是当我们在工作中多加思考会发现有时候这些服务…

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

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

python目录结构生成库,使用CMake构建平台无关的目录结构

我试图为我的跨平台项目创建一个目录结构&#xff0c;但遇到了一些问题。我已经让CMake确定了放置库和可执行文件的适当位置&#xff0c;但这种结构仅适用于Windows。在我的结构如下所示&#xff1a;项目目录垃圾箱可执行文件图书馆图书馆Python增压模块python脚本这在Windows上…

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

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

php fpm 安装配置,php php+fpm安装配置

sudo apt - get install php5 - cgi php5 - mysql php5 - fpm php5 - curl php5 - gd php5 - idn php - pear php5 - imagick php5 - imap php5 - mcrypt php5 - mhash php5 - ming php5 - pspell php5 - recode php5 - snmp php5 - tidy php5 - xmlrpc php5 - xsl打开 /etc/ph…

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

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

shell脚本执行oracle删除表,shell脚本操作oracle删除表空间、创建表空间、删除用户...

oracle下表空间的导出&#xff0c;用户的删除&#xff0c;表空间删除&#xff0c;用户新建&#xff0c;表空间新建&#xff0c;数据导入的shell使用非oracle用户执行该脚本参数说名$1&#xff1a;base表空间的用户名$2&#xff1a;同步表空间的用户名使用场景测试用&#xff0c…

PHP标题获取数据库内容,php – 如何从数据库获取项目的标题并将其发送到CodeIgniter中的标题模板...

尝试这个>型号更改>控制器已更改。在模型中function get_card($card){$query $this->db->query("SELECT * FROM table_name WHERE creditcards $card ");$result $query->result_array();$count count($result); # Newif(empty($count)){ # Newre…

php教程调用数据库,PHP数据库调用类调用实例,php数据库调用实例_PHP教程

PHP数据库调用类调用实例&#xff0c;php数据库调用实例config("dnsaaa;uidsa;pwdsa;dbnametest");//3.选择数据库$dbname $db->select_db("test");//4.设置允许调试$db->debug true;//5.执行一条不返回结果的SQL语句$db->execute("insert…