leetcode-022-斐波那契数
刷题之旅从数组类型的题目开始。第二十二道题目是斐波那契数,对应leetcode的题号为509。
题目描述
斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
1 | F(0) = 0, F(1) = 1 |
给定 N,计算 F(N)。
示例 1:
1 | 输入:2 |
示例 2:
1 | 输入:3 |
示例 3:
1 | 输入:4 |
提示:
0 ≤ N ≤ 30
解题思路
斐波那契数是我们的老朋友了,是一道经典的入门递归的题目。并且基于递归版本去改为非递归版本提高执行效率。递归版本很好写:
1 | class Solution { |
不过我们知道递归的本质是调用了系统栈,优点是代码简洁,缺点是由于存在大量重复的计算,效率很低。本题的N最大为30还能不超时,再大点这个解法必超时。
1 | 执行用时 :11 ms, 在所有 Java 提交中击败了33.63%的用户 |
以下是完成斐波那契数计算的经典方法,用三个变量来承载前两个数字,从而计算出当前的数。就不再赘述分析啦。时间复杂度为O(n),空间复杂度为O(1)。
提交代码
1 | class Solution { |