前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode 每日一题:746. 使用最小花费爬楼梯

leetcode 每日一题:746. 使用最小花费爬楼梯

作者头像
用户7685359
发布2020-12-23 12:49:43
3170
发布2020-12-23 12:49:43
举报
文章被收录于专栏:FluentStudyFluentStudy

leetcode 每日一题:746. 使用最小花费爬楼梯:https://leetcode-cn.com/problems/min-cost-climbing-stairs/

一起刷题吧

一、题目分析

输入:由数值组成的数组 输出:到达楼层顶部的最低花费 难度:简单 标签:贪心,动态规划

示例 1: 输入: cost = [10, 15, 20] 输出: 15 解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。

示例 2: 输入: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] 输出: 6 解释: 最低花费方式是从cost[0]开始,逐个经过那些1,跳过cost[3],一共花费6。

二、参考代码

这个题是动态规划里比较简单的题目,动态方程也比较好想:

F[i] 表示走到第 i 层需要的最小的步数,只是走到 F[i] = min(F[i-1] + cost[i-1], F[i-2] + cost[i-2]) 最终结果是 F[len(cost)] 即走过第 len(cost)-1 层

参考代码如下:

代码语言:javascript
复制
from typing import List


class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        if not cost:
            return 0
        # F[i] 表示走到第 i 层需要的最小的步数,只是走到
        # F[i] = min(F[i-1] + cost[i-1], F[i-2] + cost[i-2])
        # 最终结果是 F[len(cost)] 即走过第 len(cost)-1 层

        F = [0] * (len(cost) + 1)

        for i in range(2, len(cost)+1):
            F[i] = min(F[i-1]+cost[i-1], F[i-2] + cost[i-2])
        return F[-1]

对空间做优化,只需要前两次的状态,不需要使用一个数组,优化代码如下:

代码语言:javascript
复制
class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        if not cost:
            return 0
        # F[i] 表示走到第 i 层需要的最小的步数,只是走到
        # F[i] = min(F[i-1] + cost[i-1], F[i-2] + cost[i-2])
        # 最终结果是 F[len(cost)] 即走过第 len(cost)-1 层

        # 上一个,上上一个
        lp, fp = 0, 0
        for i in range(2, len(cost)+1):
            fp, lp = lp, min(lp+cost[i-1], fp + cost[i-2])
        return lp

三、相似题目

这个题目有个相似题目:70. 爬楼梯:https://leetcode-cn.com/problems/climbing-stairs/

这个题目的动态规划方程是类似的,这里直接给出实现代码:

代码语言:javascript
复制
class Solution:
    def climbStairs(self, n: int) -> int:
        if not n:
            return 0

        if n < 2:
            return 1

        # F[i] 表示到第 i 阶台阶需要多少步子
        # F[i] = F[i-1] + F[i-2]

        F = [0] * (n + 1)
        F[1] = 1
        F[2] = 2

        for i in range(3, n+1):
            F[i] = F[i-1] + F[i-2]
        return F[-1]

同样也可以对空间做优化,这里就不实现了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FluentStudy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目分析
  • 二、参考代码
  • 三、相似题目
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档