题目选自Leetcode 64.最小路径和

题目描述

解题思路

前言:

解题的方法是用动态规划~

从数据范围可以看出,n、m最多就是200×200的大小,所以dp数组就开201

那么,怎么进行动态规划的求解呢?

由于路径的方向只能是向下或向右,因此网格的第一行的每个元素只能从左上角元素开始向右移动到达,网格的第一列的每个元素只能从左上角元素开始向下移动到达,此时的路径是唯一的,因此每个元素对应的最小路径和即为对应的路径上的数字总和。

对于不在第一行和第一列的元素,可以从其上方相邻元素向下移动一步到达,或者从其左方相邻元素向右移动一步到达,元素对应的最小路径和等于其上方相邻元素与其左方相邻元素两者对应的最小路径和中的最小值加上当前元素的值。由于每个元素对应的最小路径和与其相邻元素对应的最小路径和有关,因此可以使用动态规划求解。

对于边界处理:

对于dp[0][0] 当然就是 grid[0][0]了~~~

然后我们对第0行和第0列进行边界处理,注意 是从1开始就行了

行处理如下:

for(int j=1;j<m;j++) dp[0][j] = dp[0][j-1]+grid[0][j];

列处理如下:

for(int i=1;i<n;i++) dp[i][0] = dp[i-1][0]+grid[i][0];

中间递推的过程:

for(int i=1;i<n;i++)

for(int j=1;j<m;j++)

dp[i][j] = grid[i][j] + min(dp[i][j-1],dp[i-1][j]);

最后结果:

自然就是右下角的dp值

return dp[n-1][m-1];

解题代码:

class Solution {
public:int minPathSum(vector<vector<int>>& grid) {int n = grid.size();  //获取行数int m = grid[0].size();  //获取列数int dp[201][201] = {0};dp[0][0] = grid[0][0];for(int i=1;i<n;i++) dp[i][0] = dp[i-1][0]+grid[i][0];for(int j=1;j<m;j++) dp[0][j] = dp[0][j-1]+grid[0][j];for(int i=1;i<n;i++)for(int j=1;j<m;j++)dp[i][j] = grid[i][j] + min(dp[i][j-1],dp[i-1][j]);return dp[n-1][m-1];}
};

动态规划——最小路径和(Leetcode 64)相关推荐

  1. 动态规划—最小路径和

    问题描述:给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小.每次只能向下或者向右移动一步. 算法思路: 采用动态规划,将上述矩阵转为下 ...

  2. 算法练习day15——190403(简介、求n!、汉诺塔、打印字符串的子序列、打印字符串的全排列、母牛生小牛、最小路径和、累加和是否达到给定值)

    1. 简介 动态规划是为了优化暴力尝试的. 2. 求n! 2.1 一般思路 public static long getFactorial2(int n) {long result = 1L;for ...

  3. leetcode 64. 最小路径和(递归 / 动态规划解法图解)(Java版)

    题目 leetcode 64. 最小路径和 提示: m == grid.length n == grid[i].length 1 <= m, n <= 200 0 <= grid[i ...

  4. leetcode - 64. 最小路径和

    64. 最小路径和 ------------------------------------------ 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总 ...

  5. leetcode 思路——64. 最小路径和——174. 地下城游戏

    leetcode 思路--64. 最小路径和--174. 地下城游戏 64. 最小路径和 174. 地下城游戏 64. 最小路径和 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角 ...

  6. 《LeetCode力扣练习》第64题 最小路径和 Java

    <LeetCode力扣练习>第64题 最小路径和 Java 一.资源 题目: 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为 ...

  7. LeetCode 64最小路径和65有效数字66加一

    原创公众号:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 关注后回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode打卡 52八皇后Ⅱ&53最大子序和& ...

  8. LeetCode:64. 最小路径和

    题目链接 64. 最小路径和 题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: ...

  9. [Leetcode][第120题][JAVA][三角形最小路径和][动态规划][递归]

    [问题描述][中等] [解答思路] 1. 动态规划思路一 自上而下 第 1 步:设计状态 f[i][j] 表示从三角形顶部走到位置 (i,j) 的最小路径和 位置(i,j) 指的是三角形中第 i 行第 ...

最新文章

  1. Leetcode: Top K Frequent Elements
  2. 求解最大字段和的几种方法
  3. 如何将linux装入空白硬盘,如何将tiny core linux装入硬盘
  4. python读取tiff数据_opencv-python读取tiff影像,并展示
  5. 【转】WPF XAML X名称空间详解
  6. 性能测试分析与调优原理
  7. 深入理解iPhone数据持久化(手把手教你iphone开发 - 基础篇)
  8. 【渝粤教育】国家开放大学2018年春季 0239-21T电子商务物流管理 参考试题
  9. MakeDirZ.bat
  10. 移动端rem布局实践
  11. python 简单文字游戏代码
  12. PS 做动态图视频教程
  13. bmp格式如何转换成jpg?
  14. antd的timePicker.RangePicker设置结束时间不可早于开始时间
  15. 去水印小程序源码_图片去水印|去水印喵小程序
  16. linux管理员下安装网易云,在Ubuntu 18.10系统中安装网易云音乐的方法
  17. linux下将8bit二值位图转化为1bit单色位图【C/C++】
  18. android内存显示修改,涨姿势:修改这个系统选项Android手机再也不用清内存!速度飞起...
  19. Openfire 用户密码加密
  20. 【pyqt】自制的图片裁剪分割器

热门文章

  1. 在Linux系统中存储设备的两种表示方法
  2. 深入 Linux PAM 体系结构
  3. python面试题(6)--- read、readline和readlines的区别
  4. 为什么喜欢软件工程专业_为什么我喜欢自由软件
  5. javacv入门指南:序章_建立开放文化的循序渐进指南
  6. 项目中最困难的部分_微服务最难的部分是什么? 您的资料
  7. 2017年大白菜系统操作说_为什么操作系统在2017年更重要
  8. git blob_如何使用Git管理二进制Blob
  9. 演变模型_开放组织的演变
  10. 被坑了 | 那个写公众号,开网店的小小,被花式坑了!