LintCode第366题
- 斐波纳契数列 中文English 查找斐波纳契数列中第 N 个数。
所谓的斐波纳契数列是指:
前2个数是 0 和 1 。 第 i 个数是第 i-1 个数和第i-2 个数的和。 斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 …
样例 样例 1: 输入: 1
输出: 0
样例解释: 返回斐波那契的第一个数字,是0.样例 2: 输入: 2
输出: 1 样例解释:
返回斐波那契的第二个数字是1.注意事项 在测试数据中第 N 个斐波那契数不会超过32位带符号整数的表示范围
首先想到的是递归方法
public int fibonacci(int n) {
// write your code here
if(n == 1) return 0;
if(n == 2) return 1;
return fibonacci(n - 2) + fibonacci(n - 1);
}
然鹅,
于是发现递归方法,并不满足此题的要求,于是采用非递归方法:
/**
* @param n: an integer
* @return: an ineger f(n)
*/
public int fibonacci(int n) {
// write your code here
int a = 0;
int b = 1;
int result = 0;
if(n == 1) return 0;
if(n == 2) return 1;
for (int i = 3; i < n + 1; i++){
result = a + b;
a = b;
b = result;
}
return result;
}
分析:使用低估的时间复杂度会是复杂度会是O(2^n)。因此会超时。