F(n) = F(n - 1) + F(n - 2),其中 n > 1
示例:
输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1
做题步骤:
还记得我们第一步需要怎么来分析的吗?
第一步我们需要确定这题的 DP 数组该怎么去创建?
第二步需要我们推导出本题的 DP 公式。
第三步进行循环得到我们需要的结果。
思路:
通过做题步骤我们能知道这个 DP数组 的长度是 n + 1
(因为需要从0开始到n,所以长度也就是 n + 1
)
题目所说从 1 后面开始每一项的数字都是前两项的和。通过解析这句话我们能知道我们的 循环是从2开始,到n结束 。而推导公式则就是:
dp[i] = dp[i - 1] + dp[i - 2]
当我们完成上述的步骤时接下来就是将这题给实现了。
代码:
Python版本:
class Solution:
def fib(self, n: int) -> int:
if n < 2:
return n
dp = [0]* (n + 1)
dp[1] = 1
for i in range(2 , n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
Java版本:
class Solution {
public int fib(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
int[] dp = new int[n + 1];
dp[1] = 1;
for (int i = 2; i < n + 1; i++){
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}
我们做了一个比较简单的DP题,那我们再来看另外一个简单的DP问题吧
题目:
给你一个整数数组 cost ,其中 cos