Leetcode746. 使用最小花费爬楼梯-代码随想录

目录

题目:

代码(首刷看解析):

代码(二刷自解 2024年2月19日)

代码(三刷自解 2024年6月18日 go)


题目:


代码(首刷看解析):

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n = cost.size();
        // 1.dp[i]代表爬到第i层的最小费用
        vector<int> dp(n+1);
        // 2.初始化dp
        dp[0]=0,dp[1]=0;
        // 3.递推顺序 左→右
        for(int i = 2 ; i <= n; ++i){
            // 4.状态转移方程
            dp[i]=min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1]);
        }
        return dp[n];  
    }
};

代码(二刷自解 2024年2月19日)

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n = cost.size();
        if (n == 1) return cost[0];
        if (n == 2) return min(cost[0],cost[1]);
        /*dp[i]代表到达第i层台阶所需要支付的最少费用*/
        vector<int> dp(n + 1);
        dp[0] = 0;
        dp[1] = 0;
        for (int i = 2; i < n + 1; ++i) {
            /*递推公式*/
            dp[i] = min(cost[i - 2] + dp[i - 2], cost[i - 1] + dp[i - 1]);
            cout<<"dp["<<i<<"] = "<<dp[i]<<"  ";
        }
        cout<<endl;
        return dp[n];
    }
};

代码(三刷自解 2024年6月18日 go)
 

func minCostClimbingStairs(cost []int) int {
    n := len(cost)
    dp := make([]int, n)
    dp[0] = 0
    dp[1] = 0
    for i := 2; i < len(cost); i++ {
        dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
        //fmt.Println("dp[",i,"] = ",dp[i])
    }
    return min(dp[n - 2] + cost[n - 2], dp[n - 1] + cost[n - 1])
    // dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
}

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值