/* 1st method will lead to time limit */
/* the time complexity is exponential sicne T(n) = T(n-1) + T(n-2) */
class Solution { /** * @param n: an integer * @return an integer f(n) */ public int fibonacci(int n) { // write your code here if (n == 1 || n == 2) { return (n-1); } // int sum = (n-1) + (n-2); return fibonacci(n-1) + fibonacci(n-2); } }
/* 2nd method will need O(n) space, using DP */
/* T and S are both O(n) */
1 public int fibonacci(int n) { 2 // declare an array to store the result 3 // it has to be n+2 to avoid out_of_bound 4 int[] f = new int[n+2]; 5 f[1] = 0; // when input is 1 => zero 6 f[2] = 1; // when input is 2 => 1 7 8 int i = 3; 9 while (i <= n) { // it has to be incremental instead of decremental 10 f[i] = f[i-1] + f[i-2]; 11 i++; 12 } 13 14 return f[n]; 15 }
/* 3rd method will only need O(1) space */
/* We can optimize the space used in method 2 by storing the previous two numbers only */
/* because that is all we need to get the next Fibannaci number in series. */
1 public int fibonacci(int n) { 2 if (n < 3) return n-1; 3 4 int first = 0; 5 int second = 1; 6 int third = 1; 7 8 int i = 3; 9 while (i <= n) { 10 third = first + second; 11 first = second; 12 second = third; 13 i++; 14 } 15 return third; 16 }
时间: 2024-10-12 20:40:07