解法:
用动态规划,因为只能向右或向下走,即当当前坐标为[i][j]时,下一步只能是[i][j+1][i+1][j],反过来,cost[i][j]为从[0][0][i][j]的距离,只能从[i][j-1][i-1][j][i][j],所以:
cost[i][j] = min(cost[i][j-1],cost[i-1][j]) + grid[i][j]

class Solution {public:int minPathSum(vector<vector<int>>& grid) {int m = grid.size();int n = grid[0].size();//vector<vector<int>>cost(m, vector<int>(n));int cost[500][500]; //一开始写的vector<vector<int>>cost(m, vector<int>(n)); //有点慢就参照别人的改成了这个cost[0][0] = grid[0][0];for(int i = 1; i < m; i++){//第一列cost[i][0] = cost[i-1][0] + grid[i][0];}for(int i = 1; i < n; i++){//第一行cost[0][i] = cost[0][i-1] + grid[0][i];}for(int i = 1; i < m; i++){for(int j = 1; j < n; j++){cost[i][j] = min(cost[i][j-1], cost[i-1][j]) + grid[i][j];}}return cost[m-1][n-1];}
};


https://leetcode-cn.com/problems/minimum-path-sum/solution/zui-xiao-lu-jing-he-by-leetcode/官方题解有四种方法.


一维动态规划:

class Solution {public:int minPathSum(vector<vector<int>>& grid) {int m = grid.size();if(m < 1) return 0;int n = grid[0].size();vector<int>dp(n, 0);for(int i = m - 1; i >= 0; i--){for(int j = n - 1; j >= 0; j--){if(i == m - 1 && j != n - 1){dp[j] = grid[i][j] + dp[j+1];}else if(j == n - 1 && i != m -1){dp[j] = grid[i][j] + dp[j];}else if(i != m - 1 && j != n - 1){dp[j] = grid[i][j] + min(dp[j], dp[j+1]);}else{dp[j] = grid[i][j];}}}return dp[0];}
};

leetcode64. 最小路径和相关推荐

  1. LeetCode--64. 最小路径和(动态规划)

    最小路径和(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:中等 2. 题目分析 这道题目是62题.不同路径的延伸,解题思路基本一样的,是通过动态规划来实现的: - ...

  2. LeetCode-64.最小路径和

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

  3. leetcode64. 最小路径和(dp)

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

  4. leetcode64 最小路径和

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

  5. 动态规划--Leetcode64.最小路径和

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

  6. 58同城笔试题:数组去重;分饼干(分糖果);最小路径和(leetcode64)

    1. 数组去重 题目描述 /*** 有序数组去重* 输出最终的数字个数* 输入:1,2,2* 输出:2* @author Turing**/ 代码 import java.util.*; public ...

  7. 20200225:最小路径和(leetcode64)

    最小路径和 题目 思路与算法 代码实现 时间复杂度分析 题目 思路与算法 这题和之前做过的不同路径Ⅰ,不同路径Ⅱ基本一致,状态方程式也基本一致,没有什么太多的思路,第一种方法就直接暴力枚举所有的节点到 ...

  8. 【网络流24题】最小路径覆盖问题

    [题目]1738: 最小路径覆盖问题 [题解]网络流 关于输出路径,因为即使有反向弧经过左侧点也一定会改变左侧点的去向,若没连向右侧就会被更新到0,所以不用在意. mark记录有入度的右侧点,然后从没 ...

  9. 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)

    在讲述这两个算法之前,首先有几个概念需要明白: 二分图:  二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边( ...

最新文章

  1. Android ImageView的ScaleType属性
  2. 浏览器的一个请求从发送到返回都经历了什么?
  3. 远程WEB控制MP3播放器设计(基于mini2440)
  4. 计算机文化基础第三版龙天才课后答案,龙天才
  5. 转载一篇阅读文章(还算不错吧)
  6. 大数据分析中常见的分析模型
  7. PHP 调用阿里云短信服务API发送短信
  8. 捷联惯导系统学习7.1(捷联惯导粗对准 )
  9. 怎么删除映射网络里的计算机,win10系统删除右键中“映射网络驱动器和断开网络驱动器”选项的详细办法...
  10. 金字塔原理4个基本原则_如何处理人际关系?复杂不如简单,了解6个基本原则,豁然开朗...
  11. github如何开启两步验证
  12. Mip-NeRF学习
  13. 详叙 @vue/cli 和 vue-cli
  14. 高考选日语可以学计算机吗,如果高考选日语,大学选专业有什么限制
  15. 学习hutool源码TreeUtil.build()得到了什么
  16. system(“pause”)是什么
  17. 360路由器插件_主打游戏加速 360安全路由P4C体验
  18. Python25行代码爬取豆瓣排行榜数据
  19. 如何利用Fiddler抓取websocket数据包?
  20. __unsafe_unretained的使用

热门文章

  1. python怎么读取中文文件-Python3 解决读取中文文件txt编码的问题
  2. python新手入门代码-新手零基础入门Python项目实战
  3. python使用-python 类如何使用
  4. python经典实例-Python机器学习经典实例
  5. 科大讯飞 语音识别 VB WIN10 X64 VS2017
  6. 算法-查找数组两个数据相加等于目标值
  7. 【java笔记】线程池的介绍和使用
  8. 2014——我们都任性过
  9. r语言和python的区别_c语言和python的区别
  10. 微型计算机原理中ADC,微机原理实验-逐比较式ADC.doc