zoukankan      html  css  js  c++  java
  • 【Leetcode_easy】746. Min Cost Climbing Stairs

    problem

    746. Min Cost Climbing Stairs

    题意:

    solution1:动态规划;

    定义一个一维的dp数组,其中dp[i]表示爬到第i层的最小cost,然后来想dp[i]如何推导。思考一下如何才能到第i层呢?是不是只有两种可能性,一个是从第i-2层上直接跳上来,一个是从第i-1层上跳上来。不会再有别的方法,所以dp[i]只和前两层有关系,所以可以写做如下:

    dp[i] = min(dp[i- 2] + cost[i - 2], dp[i - 1] + cost[i - 1])

    class Solution {
    public:
        int minCostClimbingStairs(vector<int>& cost) {
            int n = cost.size();
            vector<int> dp(n+1, 0);
            for(int i=2; i<=n; ++i)//errr..
            {
                dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);
            }
            return dp[n];
        }
    };
    View Code

    solution2:

    要爬当前的台阶,肯定需要加上当前的cost[i],那么还是要从前一层或者前两层的台阶上跳上来,那么选择dp值小的那个,所以递归式如下:

    dp[i] = cost[i] + min(dp[i- 1], dp[i - 2])

    最后在最后两个dp值中选择一个较小的返回即可

    class Solution {
    public:
        int minCostClimbingStairs(vector<int>& cost) {
            int n = cost.size();
            vector<int> dp(n, 0);
            dp[0] = cost[0], dp[1] = cost[1];
            for(int i=2; i<n; ++i)//errr..
            {
                dp[i] = cost[i] + min(dp[i-1], dp[i-2]);
            }
            return min(dp[n-1], dp[n-2]);
        }
    };

    参考

    1. Leetcode_easy_746. Min Cost Climbing Stairs;

    2. Grandyang;

  • 相关阅读:
    TASK1
    CSS再学
    Html再学
    Python的hasattr() getattr() setattr() 函数使用方法详解
    GET/POST/g和钩子函数(hook)
    cookie和session
    SQLAlchemy外键的使用
    jquery树形菜单插件treeView
    linux设置防火墙
    linux解压命令
  • 原文地址:https://www.cnblogs.com/happyamyhope/p/11115179.html
Copyright © 2011-2022 走看看