LeetCode——最小路径和(动态规划)

简介: LeetCode——最小路径和(动态规划)

题目描述

image.png

解题思路

本题是动态规划的经典例题,是一道必须掌握的习题。

  1. 核心的DP方程

dp[i][j]=dp[i][j]+Math.min(dp[i−1][j],dp[i][j−1])+dp[i][j]dp[i][j] = dp[i][j] + Math.min(dp[i-1][j],dp[i][j-1]) + dp[i][j]dp[i][j]=dp[i][j]+Math.min(dp[i1][j],dp[i][j1])+dp[i][j]

  1. 处理边界条件

题目中明确说了,移动的时候,只能向右或者向下移动,其他的移动方式是不被允许的,所以对第一行来说,元素只能从左往右移动,对第一列来说,元素只能从上往下移动。

  • 第一行的处理方法
for (let j = 1; j < grid[0].length; j++) {
    grid[0][j] = grid[0][j] + grid[0][j - 1];
}
复制代码
  • 第一列的处理方法
for (let i = 1; i < grid.length; i++) {
    grid[i][0] = grid[i][0] + grid[i - 1][0];
}
复制代码
  1. 处理一般情况

一般情况就是使用我们第一步的核心DP方程来进行求解。

AC代码

var minPathSum = function (grid) {
  // 本题堪称是动态规划的经典例题,必须背会
  // 本题最核心的动态方程为:dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1]) + dp[i][j]
  // 首先处理边界条件,题目明确指出每次移动只能向右或者向下移动,所以不能向左或者其他方向进行移动。
  // 处理第一行的元素:第一行的元素没有上项,从第一行的第二个元素开始进行处理
  for (let j = 1; j < grid[0].length; j++) {
    grid[0][j] = grid[0][j] + grid[0][j - 1];
  }
  // 处理第一列的元素,道理和处理第一行的元素类似
  for (let i = 1; i < grid.length; i++) {
    grid[i][0] = grid[i][0] + grid[i - 1][0];
  }
  // 处理一般情况
  for (let i = 1; i < grid.length; i++) {
    for (let j = 1; j < grid[0].length; j++) {
      grid[i][j] = Math.min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j];
    }
  }
  return grid[grid.length - 1][grid[0].length - 1]
};
复制代码

题目反思

  • 学会使用动态规划来求解路径问题。
  • 在动态规划中处理好边界条件是很重要的。
相关文章
|
26天前
【LeetCode 35】112.路径总和
【LeetCode 35】112.路径总和
21 0
|
4月前
|
算法 Unix 测试技术
力扣经典150题第五十二题:简化路径
力扣经典150题第五十二题:简化路径
42 0
|
26天前
【LeetCode 36】113.路径总和II
【LeetCode 36】113.路径总和II
27 0
|
3月前
|
机器人 Python
【Leetcode刷题Python】62. 不同路径
LeetCode 62题 "不同路径" 的Python解决方案,使用动态规划算法计算机器人从网格左上角到右下角的所有可能路径数量。
66 0
|
26天前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
11 0
|
3月前
|
Python
【Leetcode刷题Python】113. 路径总和 II
LeetCode上113号问题"路径总和 II"的Python实现,通过深度优先搜索来找出所有从根节点到叶子节点路径总和等于给定目标和的路径。
41 3
【Leetcode刷题Python】113. 路径总和 II
|
3月前
|
存储 Python
【Leetcode刷题Python】64. 最小路径和
一种使用动态规划解决LeetCode上64题“最小路径和”的Python实现方法,通过维护一个一维数组来计算从网格左上角到右下角的最小路径总和。
32 1
【Leetcode刷题Python】64. 最小路径和
|
3月前
|
存储 算法 Linux
LeetCode第71题简化路径
文章讲述了LeetCode第71题"简化路径"的解题方法,利用栈的数据结构特性来处理路径中的"."和"..",实现路径的简化。
LeetCode第71题简化路径
|
3月前
|
算法
LeetCode第64题最小路径和
LeetCode第64题"最小路径和"的解题方法,运用动态规划思想,通过构建一个dp数组来记录到达每个点的最小路径和,从而高效求解。
LeetCode第64题最小路径和
|
3月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
39 4