【Leetcode】64. 最小路径和
题目(链接)
给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例 1:
输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。
示例 2:
输入:grid = [[1,2,3],[4,5,6]]
输出:12
提示:
- m == grid.length
- n == grid[i].length
- 1 <= m, n <= 200
- 0 <= grid[i][j] <= 100
题解
思路:
- 动态规划
- 特判第一个位置
- 如果某个位置在第一行,那么只能从左面走过来,不能从上面走过来;如果某个位置在第一列,那么只能从上面走过来,不能从左面走过来。除此以外的点均是从上面走过来或者从左面走过来。
- 从上面走过来:
dp[i][j] = min(dp[i][j], dp[i - 1][j] + grid[i][j]) - 从左面走过来:
dp[i][j] = min(dp[i][j], dp[i][j - 1] + grid[i][j])
code:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int n = grid.size(), m = grid[0].size();
const int N = 210, INF = 1e9;
int dp[N][N];
for (int i = 0; i < n; i ++){
for (int j = 0; j < m; j ++){
// 特判第一个位置
if (i == 0 && j == 0){
dp[i][j] = grid[i][j];
} else {
dp[i][j] = INF;
// 特判第一行
if (i > 0){
dp[i][j] = min(dp[i][j], dp[i - 1][j] + grid[i][j]);
}
// 特判第一列
if (j > 0){
dp[i][j] = min(dp[i][j], dp[i][j - 1] + grid[i][j]);
}
}
}
}
return dp[n - 1][m - 1];
}
};
【Leetcode】64. 最小路径和的更多相关文章
- leetcode 64. 最小路径和 动态规划系列
目录 1. leetcode 64. 最小路径和 1.1. 暴力 1.2. 二维动态规划 2. 完整代码及执行结果 2.1. 执行结果 1. leetcode 64. 最小路径和 给定一个包含非负整数 ...
- LeetCode 64. 最小路径和(Minimum Path Sum) 20
64. 最小路径和 64. Minimum Path Sum 题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明: 每次只能向下或 ...
- Java实现 LeetCode 64 最小路径和
64. 最小路径和 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], ...
- [LeetCode] 64. 最小路径和 ☆☆☆(动态规划)
描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入:[ [1,3,1], [1,5,1 ...
- LeetCode 64最小路径和
题目 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5 ...
- [LeetCode]64. 最小路径和(DP)
题目 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4 ...
- Leetcode——64. 最小路径和
题目描述:题目链接 同样对于这个问题,我们可以考虑用动态规划来解决. 解决动态规划常见的三个步骤: 1:问题的归纳.对于 i,j 位置上的最短路径可以用d[ i ][ j ]表示. 2:归纳递推式:d ...
- leetcode 64. 最小路径和Minimum Path Sum
很典型的动态规划题目 C++解法一:空间复杂度n2 class Solution { public: int minPathSum(vector<vector<int>>&am ...
- Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum)
Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum) 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. ...
- Leetcode题目64.最小路径和(动态规划-中等)
题目描述: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1, ...
随机推荐
- 西门子SIMATIC LPMLV30 库的模式和状态管理器
从基于S7-1200 / S7-1500的OMAC PackML V3.0获取到的文章内容,用于记录查看 基本信息 根据PackML_V3.0,该库包含了用于机械模式和状态管理器的功能模块. • 机械 ...
- logging --- Python 的日志记录工具
logging --- Python 的日志记录工具 源代码: Lib/logging/__init__.py Important 此页面仅包含 API 参考信息.教程信息和更多高级用法的讨论,请参阅 ...
- golang数组&切片&map
数组 数组声明 func main() { /* 语法一 */ // 数组名字 [数组长度] 数组类型 // 声明一个数组 长度为3 类型是int 会初始化为int类型的零值,默认值是[0 0 0 ] ...
- 【Unity3D】激光灯、碰撞特效
1 需求描述 本文将模拟激光灯(或碰撞)特效,详细需求如下: 从鼠标位置发射屏幕射线,检测是否与物体发生碰撞 当与物体发生碰撞时,在物体表面覆盖一层激光灯(或碰撞)特效 本文代码见→激光灯.碰 ...
- MutationObserver对象
MutationObserver对象 MutationObserver (W3C DOM4)对象提供了监视对DOM树所做更改的能力,其被设计为旧的Mutation Events功能的替代品(该功能是D ...
- VuePress + Github Pages 搭建文档博客
说明 最近想把常用的一些干货知识点都集中起来,方便发布和查找.相当于创建一个自己的知识库,我就叫它Java技术文档.虽然博客写文档也挺方便,但是在于文档的集中阅读和管理方面还是不够简洁和快速.此处就以 ...
- Java集合框架学习(六) LinkedList详解
LinkedList介绍 ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只是实现的方式有所不同. LinkedList是采用链表的方式来实现 ...
- 小红书 x Hugging Face 邀请你一起晒「创意新春照」
不藏了,近期全网爆火的AI 写真项目 InstantID,正是来自小红书社区技术创作发布团队. 为了迎接龙年春节的到来,我们的InstantID全新推出「Spring Festival」新春风格!并与 ...
- ROS2 humble交叉编译环境配置
目录 配置 toolchain文件: 库文件 交叉编译指令: 问题点: 1.find_package找不到自定义依赖包的问题 2.libarmadillo.so.10: undefined refer ...
- 在Mac下使用zsh
什么是zsh 简单来说,zsh是一个构建于bash之上的shell工具,详见:zsh . 相比起bash,zsh默认支持许多非常实用的功能,比如:可以显示当前所在的git分支,这对于程序员来说是非常有 ...