0
点赞
收藏
分享

微信扫一扫

SpringMVC速成(一)

霸姨 2024-02-12 阅读 13

文章目录

思路

解题方法

复杂度

时间复杂度:

空间复杂度:

Code

解法一 (暴力搜索)

class Solution {
    public int fib(int n) {
        if(n == 0) {
            return 0;
        }
        if(n == 1) {
            return 1;
        }
        return fib(n - 1) + fib(n - 2);
    }
}

解法二 (记忆化搜索)

class Solution {
    public int fib(int n) {
        int[] arr = new int[n + 1];
        Arrays.fill(arr, -1);
        return f(n, arr);
    }
     public int f(int n, int[] arr) {
        if(n == 0) {
            return 0;
        }
        if(n == 1) {
            return 1;
        }
        // 命中缓存
        if(arr[n] != -1) {
            return arr[n];
        }
        int ans = f(n - 1, arr) + f(n - 2, arr);
        // 记录缓存
        arr[n] = ans;
        return ans;
    }
}

解法三(动态规划)

class Solution {
    public int fib(int n) {
        if (n == 0) {
            return 0;
        }
        if (n == 1) {
            return 1;
        }
        int[] dp = new int[n + 1];
        dp[1] = 1;
        for(int i = 2; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}

解法四(动态规划(空间O(1)))

class Solution {
    public int fib(int n) {
        if (n == 0) {
            return 0;
        }
        if (n == 1) {
            return 1;
        }
        int Lastlast = 0, Last = 1;
        for (int i = 2, cur; i <= n; i++) {
            cur = Lastlast + Last;
            Lastlast = Last;
            Last = cur;
        }
        return Last;
    }
}
举报

相关推荐

0 条评论