题目链接
class Solution {
public int fib(int n) {
// int[] arr = new int[n+1];
// return calculate1(n);
// return calculate2(n,arr);
return calculate3(n);
}
// 1.暴力递归
public int calculate1(int n) {
if(n == 0 || n == 1) return n;
return calculate1(n-1)+calculate1(n-2);
}
// 2.去重递归
public int calculate2(int n,int[] arr) {
if(n == 0 || n == 1) return n;
if(arr[n] != 0) return arr[n];
arr[n] = calculate2(n-1,arr)+calculate2(n-2,arr);
return arr[n];
}
// 3.双指针迭代,O(N)复杂度
public int calculate3(int n) {
int prev = 0;
int cur = 1;
for(int i = 0; i < n; i++) {
cur = prev+cur;
prev = cur-prev;
}
return prev; // 返回prev是因为从0开始。
}
}