zoukankan      html  css  js  c++  java
  • 动态规划之爬楼梯问题

    题目如下:

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

    注意:给定 n 是一个正整数。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/climbing-stairs
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    分析:

    假设,只有1个台阶,那么需要爬1步,只有1种方法。

    假设,只有2个台阶,那么需要先爬1步再爬1步,或者爬2步,有2种方法。

    假设,只有3个台阶,那么需要先爬1步再爬1步再爬1步,或者爬2步再爬1步或者爬1步再爬2步,有3种方法。

    以此类推,最终可以找到规律,假设有N个台阶,那么最终结果等于爬N-1个台阶和N-2个台阶的方法总数。

    (将一个复杂的问题,转移成另一种状态,划分为多个子问题)

    题解:

    动态规划+滚动数组

    class Solution {
        public static int climbStairs(int n) {
            switch (n) {
                case 1 :
                    return 1;
                case 2 :
                    return 2;
            }
            int[] rollArr = {1, 2};
            for (int i = 3; i < n + 1; i++) {
                int res = rollArr[0] + rollArr[1];
                rollArr[0] = rollArr[1];
                rollArr[1] = res;
            }
            return rollArr[1];
        }
    }
    

     利用数组存储每次计算所需的两个子问题的结果,避免重复计算子问题的结果。

     

  • 相关阅读:
    vue与自定义元素的关系
    vue用组件构建应用
    vue处理用户输入
    vue条件与循环
    vue声明式渲染
    Java编程的逻辑 (86)
    Java编程的逻辑 (85)
    Java编程的逻辑 (84)
    Java编程的逻辑 (83)
    Java编程的逻辑 (82)
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13273124.html
Copyright © 2011-2022 走看看