leetcode64. 最小路径和
解法:
用动态规划,因为只能向右或向下走,即当当前坐标为[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. 最小路径和相关推荐
- LeetCode--64. 最小路径和(动态规划)
最小路径和(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:中等 2. 题目分析 这道题目是62题.不同路径的延伸,解题思路基本一样的,是通过动态规划来实现的: - ...
- LeetCode-64.最小路径和
题目描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 思路 设dp为大小为 m x n的 ...
- leetcode64. 最小路径和(dp)
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小.说明:每次只能向下或者向右移动一步.示例:输入: [[1,3,1],[1,5,1],[4,2,1 ...
- leetcode64 最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5, ...
- 动态规划--Leetcode64.最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5, ...
- 58同城笔试题:数组去重;分饼干(分糖果);最小路径和(leetcode64)
1. 数组去重 题目描述 /*** 有序数组去重* 输出最终的数字个数* 输入:1,2,2* 输出:2* @author Turing**/ 代码 import java.util.*; public ...
- 20200225:最小路径和(leetcode64)
最小路径和 题目 思路与算法 代码实现 时间复杂度分析 题目 思路与算法 这题和之前做过的不同路径Ⅰ,不同路径Ⅱ基本一致,状态方程式也基本一致,没有什么太多的思路,第一种方法就直接暴力枚举所有的节点到 ...
- 【网络流24题】最小路径覆盖问题
[题目]1738: 最小路径覆盖问题 [题解]网络流 关于输出路径,因为即使有反向弧经过左侧点也一定会改变左侧点的去向,若没连向右侧就会被更新到0,所以不用在意. mark记录有入度的右侧点,然后从没 ...
- 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)
在讲述这两个算法之前,首先有几个概念需要明白: 二分图: 二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边( ...
最新文章
- Android ImageView的ScaleType属性
- 浏览器的一个请求从发送到返回都经历了什么?
- 远程WEB控制MP3播放器设计(基于mini2440)
- 计算机文化基础第三版龙天才课后答案,龙天才
- 转载一篇阅读文章(还算不错吧)
- 大数据分析中常见的分析模型
- PHP 调用阿里云短信服务API发送短信
- 捷联惯导系统学习7.1(捷联惯导粗对准 )
- 怎么删除映射网络里的计算机,win10系统删除右键中“映射网络驱动器和断开网络驱动器”选项的详细办法...
- 金字塔原理4个基本原则_如何处理人际关系?复杂不如简单,了解6个基本原则,豁然开朗...
- github如何开启两步验证
- Mip-NeRF学习
- 详叙 @vue/cli 和 vue-cli
- 高考选日语可以学计算机吗,如果高考选日语,大学选专业有什么限制
- 学习hutool源码TreeUtil.build()得到了什么
- system(“pause”)是什么
- 360路由器插件_主打游戏加速 360安全路由P4C体验
- Python25行代码爬取豆瓣排行榜数据
- 如何利用Fiddler抓取websocket数据包?
- __unsafe_unretained的使用