[LeetCode] 509. Fibonacci Number

斐波那契数列。题意很简单,求出斐波那契数列里面第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.

迭代

时间O(n)

空间O(1)

 1 /**
 2  * @param {number} N
 3  * @return {number}
 4  */
 5 var fib = function(N) {
 6     if (N <= 1) {
 7         return N;
 8     }
 9     var a = 0;
10     var b = 1;
11     while (N > 1) {
12         var sum = a + b;
13         a = b;
14         b = sum;
15         N--;
16     }
17     return b;
18 };

 

递归

时间O(n)

空间O(n)

 1 /**
 2  * @param {number} N
 3  * @return {number}
 4  */
 5 var fib = function(N) {
 6     if (N <= 1) {
 7         return N;
 8     } else {
 9         return fib(N - 1) + fib(N - 2);
10     }
11 };

 

动态规划

时间O(n)

空间O(n)

 1 /**
 2  * @param {number} N
 3  * @return {number}
 4  */
 5 var fib = function(N) {
 6     if (N <= 1) {
 7         return N;
 8     }
 9     let dp = [N + 1];
10     dp[0] = 0;
11     dp[1] = 1;
12     for (let i = 2; i <= N; i++) {
13         dp[i] = dp[i - 2] + dp[i - 1];
14     }
15     return dp[N];
16 };

你可能感兴趣的:([LeetCode] 509. Fibonacci Number)