题解 | #斐波那契数列#
斐波那契数列
https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3
方法一:递归
斐波那契数列:f(n) = f(n-1) + f(n+1) (n>2)。可以将问题分解,使用递归解答。
时间复杂度:o(2n)。
空间复杂度:o(n)。递归栈深度
class Solution {
public:
int Fibonacci(int n) {
if(n == 1 || n == 2)
return 1;
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
};
方法二:递归
上述递归会有很多重复的计算,可以利用一个数组将数列保存下来,这样可以避免递归过程的重复计算。
时间复杂度:o(n)。
空间复杂度:o(n)。递归栈深度
class Solution {
public:
int fn[50] = {0};
int Fibonacci(int n) {
if (n == 1 || n == 2)
return 1;
if (fn[n] > 0)
return fn[n];
fn[n] = Fibonacci(n - 1) + Fibonacci(n - 2);
return fn[n];
}
};
方法三:动态规划
直接从最小的序列开始计算,直到得到想要序列。
时间复杂度:o(n)。
空间复杂度:o(1)。
class Solution {
public:
int Fibonacci(int n) {
if (n == 1 || n == 2)
return 1;
int temp1 = 1;
int temp2 = 1;
int res;
for (int i = 2; i < n; i++) {
res = temp1 + temp2;
temp1 = temp2;
temp2 = res;
}
return res;
}
};
刷题题解(c++) 文章被收录于专栏
算法题题解(c++)
查看12道真题和解析