剑指offer最优解Java版

剑指offer最优解Java版-跳台阶

2019-06-22  本文已影响1人  全菜工程师小辉

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

递归向动态规划转化的步骤,详解可以看这篇博客

第一种方案:递归

class Solution {
  int climbStairs(int n) {
        if (n <= 2) {
            return n;
        } else {
            return climbStairs(n - 1) + climbStairs(n - 2);
        }
    }
}

复杂度分析:

第二种方案:备忘录法

class Solution {
    private Map<Integer, Integer> map = new HashMap<>();
    public static int climbStairs(int [] array) {
        if (n <= 2) {
            return n;
        } else if (map.containsKey(n)) {
            return map.get(n);
        } else {
            int value = climbStairs(n - 1) + climbStairs(n - 2);
            map.put(n, value);
            return value;
        }
    }
}

复杂度分析:

第三种方案:动态规划

class Solution {
    int climbStairs(int n) {
        if (n <= 2) {
            return n;
        }
        // 边界条件
        int a = 1;
        int b = 2;
        int result = 0;
        // 最优子结构与最终问题之间的关系
        for (int i = 3; i <= n; i++) {
            result = a + b;
            a = b;
            b = result;
        }
        return result;
    }
}

复杂度分析:

哎呀,如果我的名片丢了。微信搜索“全菜工程师小辉”,依然可以找到我
上一篇 下一篇

猜你喜欢

热点阅读