题目链接
    image.png
    image.png
    image.png
    image.png

    1. class Solution {
    2. public int fib(int n) {
    3. // int[] arr = new int[n+1];
    4. // return calculate1(n);
    5. // return calculate2(n,arr);
    6. return calculate3(n);
    7. }
    8. // 1.暴力递归
    9. public int calculate1(int n) {
    10. if(n == 0 || n == 1) return n;
    11. return calculate1(n-1)+calculate1(n-2);
    12. }
    13. // 2.去重递归
    14. public int calculate2(int n,int[] arr) {
    15. if(n == 0 || n == 1) return n;
    16. if(arr[n] != 0) return arr[n];
    17. arr[n] = calculate2(n-1,arr)+calculate2(n-2,arr);
    18. return arr[n];
    19. }
    20. // 3.双指针迭代,O(N)复杂度
    21. public int calculate3(int n) {
    22. int prev = 0;
    23. int cur = 1;
    24. for(int i = 0; i < n; i++) {
    25. cur = prev+cur;
    26. prev = cur-prev;
    27. }
    28. return prev; // 返回prev是因为从0开始。
    29. }
    30. }