斐波那契数列

scorlw 发布于

斐波那契数列

关键词:迭代、斐波那契数列

题目描述

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:

1
2
F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

1
2
输入:n = 2
输出:1

示例2:

1
2
输入:n = 5
输出:5

思路

思路一:

栈和队列的区别就是先进后出和先进先出,所以可以使用一个栈当作辅助栈,用来实现另一个栈中元素的顺序调节。

建立栈s1和s2,初始化为空;(栈s1用作辅助栈)

添加元素:如果s2为空,则直接添加;如果s2有元素,则先倒到s1中,添加元素,再从s1倒回来;

删除元素:如果s2为空,返回-1,否则返回并删除s2顶端的元素。

代码

思路一:

因为斐波那契数列是有规律的,每个数只与前两个数有关,所以每次只需要保存前两个数就可以。

利用j和k保存两个数,注意每次都要对k进行一下取余。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
int fib(int n) {
if(n < 0) return 0;
if(n == 0) return 0;
if(n == 1) return 1;
int j = 0;
int k = 1;
for(int i = 0; i < n - 1; i++){
int temp = k;
k += j;
j = temp;
if(k > 1000000007) k = k % 1000000007;
}
return k;
}
};

知识点

  1. 斐波那契数列
  2. 迭代