当前位置 : 主页 > 编程语言 > 其它开发 >

力扣算法JS LC [746. 使用最小花费爬楼梯] LC [62. 不同路径]

来源:互联网 收集:自由互联 发布时间:2022-06-10
菜鸡刷算法的一天,每天分享两题算法,大家有这个想法的,可以给我个关注,然后一起坚持每天的算法之旅。希望我们共同进步,一起加油。 动规算法采用了 代码随想录 的动规五部
菜鸡刷算法的一天,每天分享两题算法,大家有这个想法的,可以给我个关注,然后一起坚持每天的算法之旅。希望我们共同进步,一起加油。

动规算法采用了 代码随想录 的动规五部曲的步骤来做 https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E4%BB%80%E4%B9%88%E6%98%AF%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92

 

LC 746. 使用最小花费爬楼梯

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

示例 1:

输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。

- 支付 15 ,向上爬两个台阶,到达楼梯顶部。
总花费为 15 。

示例 2:

输入:cost = [1,100,1,1,1,100,1,1,100,1]
输出:6
解释:你将从下标为 0 的台阶开始。

- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
- 支付 1 ,向上爬一个台阶,到达楼梯顶部。
总花费为 6 。

解题思路:使用动规五部曲。到达当前楼梯 i 有两种方法,一种由 i - 1来,一种由 i - 2来。

代码:

var minCostClimbingStairs = function(cost) {
   let dp = [cost[0], cost[1]];
   for(let i = 2; i < cost.length; i++) {
       dp[i] = Math.min(dp[i - 1] + cost[i], dp[i - 2] + cost[i]); //将当前值与上一个值和当前值与上二个值进行对比,选取最小的。
  }
   return Math.min(dp[cost.length  -1], dp[cost.length - 2]) //返回倒一和倒二中最小的值
};

 

LC 62. 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

示例 1:

img

输入:m = 3, n = 7
输出:28

示例 2:

输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。

1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下

示例 3:

输入:m = 7, n = 3
输出:28

示例 4:

输入:m = 3, n = 3
输出:6

 

解题思路:动规五部曲。递归公式:每一个 (i,j)位置都是从(i-1,j)或者(i,j-1)而来的

代码:

var uniquePaths = function(m, n) {
   let dp = Array(m).fill().map(item => Array(n)); //创建二维数组
   for(let i = 0; i < m; i++) {
       dp[i][0] = 1; //将每行第一个的路径值都设为 1
  }
   for(let i = 0; i < n; i++) {
       dp[0][i] = 1; //将每列第一个的路径值都设为 1
  }
   for (let i = 1; i < m; ++i) {
       for (let j = 1; j < n; ++j) {
           dp[i][j] = dp[i - 1][j] + dp[i][j - 1] //每个dp[i][j] 都从 dp[i-1][j] 或 dp[i][j - 1]来的
      }
  }
   return dp[m - 1][n - 1]
};
 
网友评论