爬楼梯

290 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

爬楼梯

实际是求解斐波拉契数列第n项的值 f(n) = f(n-1)+f(n-2)

方法一:暴力递推

  1. 找出递推公式,暴力递推
  2. 不使用缓存,时间复杂度高,leetcode不通过
 /**
     * 递归的方式,没有缓存的话时间复杂度度高.O(2^n)
     *
     * @return
     * @paramn
     */
    public static int climbStairs1(int n) {
        if (n < 3) return n;
        return climbStairs1(n - 2) + climbStairs1(n - 1);
    }

方法二:动态规划

 /**
     * for 循环的方式,每次只保存最近的两个值
     *
     * @return
     * @paramn
     */
    public static int climbStairs2(int n) {
        if (n < 3) {
            return n;
        }
        int f1 = 1;
        int f2 = 2;
        int f3 = 0;
        for (int i = 3; i < n + 1; i++) {
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        return f3;
    }