主页 > 手机  > 

【算法|动态规划No.17】leetcode64.最小路径和

【算法|动态规划No.17】leetcode64.最小路径和

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

点击直接跳转到该题目

目录 1️⃣题目描述2️⃣题目解析3️⃣解题代码

1️⃣题目描述

给定一个包含非负整数的 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.lengthn == grid[i].length1 <= m, n <= 2000 <= grid[i][j] <= 200 2️⃣题目解析

状态表示:

到达(i,j)位置的最小路径和。

状态转移方程:

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

返回值:

dp[m][n],注意,由于我这里多开辟了一行一列的空间,所以最后返回的是最后一个位置的dp值,即到达最后一个位置的最小路径和。 3️⃣解题代码 class Solution { public: int minPathSum(vector<vector<int>>& grid) { int m = grid.size(),n = grid[0].size(); int ret = 0; vector<vector<int>> dp(m + 1,vector<int>(n + 1,INT_MAX)); for(int i = 1;i <= m;i++) { for(int j = 1;j <= n;j++) { if(i == 1 && j == 1) dp[i][j] = grid[0][0]; else dp[i][j] = min(dp[i][j - 1],dp[i - 1][j]) + grid[i - 1][j - 1]; } } ret = dp[m][n]; return ret; } };

通过啦!!!

标签:

【算法|动态规划No.17】leetcode64.最小路径和由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【算法|动态规划No.17】leetcode64.最小路径和