题目链接




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开始。 }}