美文网首页剑指offer最优解Java版
剑指offer最优解Java版-跳台阶

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

作者: 全菜工程师小辉 | 来源:发表于2019-06-22 14:17 被阅读1次

    题目描述

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

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

    第一种方案:递归

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

    复杂度分析:

    • 时间复杂度:O(2n)。
    • 空间复杂度:O(2n)。

    第二种方案:备忘录法

    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;
            }
        }
    }
    

    复杂度分析:

    • 时间复杂度:O(n)。
    • 空间复杂度:O(n)。

    第三种方案:动态规划

    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;
        }
    }
    

    复杂度分析:

    • 时间复杂度:O(n)。
    • 空间复杂度:O(1)。
    哎呀,如果我的名片丢了。微信搜索“全菜工程师小辉”,依然可以找到我

    相关文章

      网友评论

        本文标题:剑指offer最优解Java版-跳台阶

        本文链接:https://www.haomeiwen.com/subject/ahamqctx.html