问题

在一个楼梯上,cost[i]表示第i个梯子的代价,只要你付出这个代价就可以爬一步或两步,你可以从index 0开始或者index 1开始爬。求爬到顶部(cost的index从0到n-1,要爬到index n的梯子上)的最小代价。cost的长度至少为2。

Input: cost = [10, 15, 20]
Output: 15
Input: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
Output: 6

思路

做法1:dp[i]表示到达i个阶梯需要付出的最小代价,因为可以跳一步或两步,dp[i]可以表示为前一个阶梯跳过来和前两个阶梯跳过来花费的代价的最小值,dp公式为:\(dp[i] = min(dp[i-1]+cos[i-1], dp[i-2]+cost[i-2])\)

时间复杂度O(n),空间复杂度O(n)

做法2:考虑到每次dp的值dp[i]只取决于前面两个值dp[i-1]和dp[i-2],可以使用两个临时变量f1和f2来代替,这样可以省下dp数组的空间开销。

时间复杂度O(n),空间复杂度O(1)

代码

做法1

class Solution(object):def minCostClimbingStairs(self, cost):""":type cost: List[int]:rtype: int"""dp = [0] * (len(cost)+1)for i in range(2,len(cost)+1):dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])return dp[len(cost)]   

做法2

class Solution(object):def minCostClimbingStairs(self, cost):""":type cost: List[int]:rtype: int"""f1 = f2 = 0for i in range(2,len(cost)+1):f1, f2 = min(f1+cost[i-1], f2+cost[i-2]), f1return f1   

转载于:https://www.cnblogs.com/liaohuiqiang/p/9745614.html

746. Min Cost Climbing Stairs相关推荐

  1. 【动态规划 斐波那切数列】LeetCode 746. Min Cost Climbing Stairs

    LeetCode 746. Min Cost Climbing Stairs 本博客转载自:http://www.cnblogs.com/grandyang/p/8343874.html 存在无代价的 ...

  2. 746. Min Cost Climbing Stairs 题解

    leetcode.com/problems/min-cost-climbing-stairs/ minCost[n]: 达到台阶n需要消耗的最小成本 Cost[n]: 台阶n自身的成本 递推式为 mi ...

  3. Leetcode 746. Min Cost Climbing Stairs

    思路:动态规划. 1 class Solution { 2 //不能对cost数组进行写操作,因为JAVA中参数是引用 3 public int minCostClimbingStairs(int[] ...

  4. [dp]leetcode 746. Min Cost Climbing Stairs

    输入:一个数组cost,cost[i]表示越过第i个台阶的代价(可能是热量,也可能是过路费) 输出:走过这n个台阶,需要的最小代价 规则:一旦你为第i个台阶付出代价cost[i],那么你可以到达第i+ ...

  5. LeetCode 746. Min Cost Climbing Stairs--动态规划--Java,C++,Python解法

    题目地址:Min Cost Climbing Stairs - LeetCode LeetCode 动态规划(Dynamic programming)系列题目:LeetCode 动态规划(Dynami ...

  6. C#LeetCode刷题之#746-使用最小花费爬楼梯( Min Cost Climbing Stairs)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4016 访问. 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个 ...

  7. 爬楼梯 · Climbing Stairs

    [抄题]: 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? [思维问题]: 不知道一步.两步怎么加.还是用iteration迭代.此题公式可被 ...

  8. 70. Climbing Stairs

    70. Climbing Stairs 1. 题目 You are climbing a stair case. It takes n steps to reach to the top. Each ...

  9. cf 1511 D. Min Cost String

    cf 1511 D. Min Cost String 题意: 我们规定一个字符串的费用为存在一个i和j(i<j),然后s[i] = =s[j] && s[i+1] = =s[j+ ...

  10. 【斐波那切数列】LeetCode 70. Climbing Stairs

    LeetCode 70. Climbing Stairs 这是一道利用斐波那切数列求解的题目.求斐波那切数列有比较经典的4种方法 (1)递归法:复杂度太高 (2)迭代法:时间复杂度为O(n)O(n)O ...

最新文章

  1. c语言程序的多文件组织,C代码多文件的组织
  2. PHP函数参数传递方法的具体改进技巧
  3. Hive常见面试问题(持续更新)
  4. 如何写年终总结(转)
  5. 文件服务器与数据库服务器,文件服务器和数据库服务器
  6. 05NumPy--5.4矩阵
  7. OpenSSH学习笔记(安装配置openssh-4.6p1)[zz]
  8. ubuntu安装mysql失败怎么删除_Ubuntu 14.04卸载安装失败的Mysql数据库,以及重新安装配置...
  9. git pull使用【转】
  10. 一篇文章看懂Facebook和新浪微博的智能FEED
  11. 5个免费GitHub最强前端学习资源 程序员不花一分钱也能变很强
  12. vscode安装和配置ESLint
  13. 函数参数*arg和参数**arg区别
  14. Echart在Openlayers的应用-航班的炫光特效
  15. 二本考生考研复试331分逆袭390分上岸,被传教务处长之子?校方回应!
  16. 关于小电脑研制与经营的研究报告
  17. 求6+66+666+6666+66666。(10分)(JAVA)
  18. 怎么用vbs代码表白
  19. LLVM每日谈之四十一 组装一个完整的工具链
  20. 基于Java毕业设计智能快递分拣系统源码+系统+mysql+lw文档+部署软件

热门文章

  1. go语言--正则表达式过滤数据--通过文件获取数据
  2. php二级垂直导航栏,垂直(纵向)二级导航菜单
  3. 手机通话记录重复显示怎么处理_手机通话记录怎么找回
  4. RSA、DSA算法原理与举例
  5. HDU-1159-Common Subsequence
  6. application配置和profile隔离配置(转)
  7. 新手android中ListView实现音乐列表
  8. 使用TortoiseSVN下载source force的源代码
  9. 欧洲冠军联赛决赛结束
  10. 传感器的时间同步系统