509. Fibonacci Number

问题:

斐波那契函数。

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 };

 

上一篇:剑指offer 斐波那契数列


下一篇:动态规划求斐波那契数列