问题:
斐波那契函数。
F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), for N > 1.
给定N,求解F(N)
Example 1: Input: 2 Output: 1 Explanation: F(2) = F(1) + F(0) = 1 + 0 = 1. Example 2: Input: 3 Output: 2 Explanation: F(3) = F(2) + F(1) = 1 + 1 = 2. Example 3: Input: 4 Output: 3 Explanation: F(4) = F(3) + F(2) = 2 + 1 = 3. Note: 0 ≤ N ≤ 30.
解法:
DP动态规划:
dp[i]表示F[i]的结果。
动态转移方程:
dp[i]=dp[i-1]+dp[i-2]
这里需要记录前两个数,因此设定两个变量记录前两个数
res:dp[i-1]
res_1:dp[i-2]
那么对于一个i
res=res+res_1
res由dp[i-1]变为新的dp[i]的结果,
res_1应该同时由dp[i-2]更新为dp[i-1],即本来应该=加运算之前的res的结果
但这时res改变了,
因此需要一个临时tmp去记录加运算之前但res
参考代码:
1 class Solution { 2 public: 3 int fib(int N) { 4 int res=1, res_1=0; 5 if(N==0) return 0; 6 for(int i=1; i<N; i++){ 7 int tmp=res; 8 res+=res_1; 9 res_1=tmp; 10 } 11 return res; 12 } 13 };