【leetcode-62,63,64 动态规划】 不同路径,最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例:
- 输入:
- [
- [1,3,1],
- [1,5,1],
- [4,2,1]
- ]
- 输出: 7
- 解释: 因为路径 1→3→1→1→1 的总和最小。
基础的动态规划问题,适合理解动态规范的想法
没有像之前设一个行和列+1的数组,这样更直观些不容易犯错
- class Solution {
- public int minPathSum(int[][] grid) {
- int m = grid.length; //行数
- int n = grid[0].length; //列数
- int[][] dp = new int[m][n];
- //初始化第一行和第一列
- dp[0][0] = grid[0][0];
- for (int i=1;i<n;i++) {
- dp[0][i] = dp[0][i-1] + grid[0][i];
- }
- for (int i=1;i<m;i++) {
- dp[i][0] = dp[i-1][0] +grid[i][0];
- }
- for (int i=1;i<m;i++) {
- for (int j=1;j<n;j++) {
- dp[i][j] = grid[i][j] + Math.min(dp[i-1][j],dp[i][j-1]);
- }
- }
- return dp[m-1][n-1];
- }
- }
【leetcode-62 动态规划】 不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
例如,上图是一个7 x 3 的网格。有多少可能的路径?
说明:m 和 n 的值均不超过 100。
示例 1:
- 输入: m = 3, n = 2
- 输出: 3
- 解释:
- 从左上角开始,总共有 3 条路径可以到达右下角。
- 1. 向右 -> 向右 -> 向下
- 2. 向右 -> 向下 -> 向右
- 3. 向下 -> 向右 -> 向右
示例 2:
- 输入: m = 7, n = 3
- 输出: 28
- 与上题类似,基础
我的:
- class Solution {
- public int uniquePaths(int m,int n) {
- int[][] dp = new int[m][n];
- //初始化第一行和第一列
- dp[0][0] = 1;
- for (int i=1;i<n;i++) {
- dp[0][i] = 1;
- }
- for (int i=1;i<m;i++) {
- dp[i][0] = 1;
- }
- for (int i=1;i<m;i++) {
- for (int j=1;j<n;j++) {
- dp[i][j] = dp[i-1][j] + dp[i][j-1];
- }
- }
- return dp[m-1][n-1];
- }
- }
63. 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1
和 0
来表示。
说明:m 和 n 的值均不超过 100。
示例 1:
- 输入:
- [
- [0,0,0],
- [0,1,0],
- [0,0,0]
- ]
- 输出: 2
- 解释:
- 3x3 网格的正中间有一个障碍物。
- 从左上角到右下角一共有
2
条不同的路径:- 1. 向右 -> 向右 -> 向下 -> 向下
- 2. 向下 -> 向下 -> 向右 -> 向右
- public int uniquePathsWithObstacles(int[][] obstacleGrid) {
- int m = obstacleGrid.length;
- int n = obstacleGrid[0].length;
- int[][] dp = new int[m][n];
- //初始化第一行和第一列
- if (obstacleGrid[0][0] == 1) {
- dp[0][0] = 0;
- } else {
- dp[0][0] = 1;
- }
- for (int i=1;i<n;i++) {
- if (obstacleGrid[0][i] == 1)
- dp[0][i] = 0;
- else
- dp[0][i] = dp[0][i-1];
- }
- for (int i=1;i<m;i++) {
- if (obstacleGrid[i][0] == 1)
- dp[i][0] = 0;
- else
- dp[i][0] = dp[i-1][0];
- }
- for (int i=1;i<m;i++) {
- for (int j=1;j<n;j++) {
- if (obstacleGrid[i][j] == 1) {
- dp[i][j] = 0;
- } else {
- dp[i][j] = dp[i-1][j] + dp[i][j-1];
- }
- }
- }
- return dp[m-1][n-1];
- }
【leetcode-62,63,64 动态规划】 不同路径,最小路径和的更多相关文章
- [LeetCode] 64. Minimum Path Sum 最小路径和
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- [leetcode]64. Minimum Path Sum最小路径和
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- LeetCode 62,从动态规划想到更好的解法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第36篇文章,我们一起来看下LeetCode的62题,Unique Paths. 题意 其实这是一道老掉牙的题目了 ...
- LeetCode 62. Unique Paths(所有不同的路径)
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- leetcode@ [62/63] Unique Paths II
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleG ...
- LeetCode OJ:Minimum Path Sum(最小路径和)
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- [LeetCode] 62. Unique Paths 唯一路径
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- (step6.3.4)hdu 1151(Air Raid——最小路径覆盖)
题意: 一个镇里所有的路都是单向路且不会组成回路. 派一些伞兵去那个镇里,要到达所有的路口,有一些或者没有伞兵可以不去那些路口,只要其他人能完成这个任务.每个在一个路口着陆了的伞兵可以沿着街去 ...
- Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum)
Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum) 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. ...
- leetcode 64. 最小路径和 动态规划系列
目录 1. leetcode 64. 最小路径和 1.1. 暴力 1.2. 二维动态规划 2. 完整代码及执行结果 2.1. 执行结果 1. leetcode 64. 最小路径和 给定一个包含非负整数 ...
随机推荐
- 【13NOIP提高组】转圈游戏(信息学奥赛一本通 1875)(洛谷 1965)
题目描述 nn 个小描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号 ...
- Django 数据库与ORM
一.数据库的配置 1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1> sqlite django默认使用sqlite的数据库,默认自带 ...
- go语言Mac下编译安装语言包
这两天公司成立了go语言学习兴趣小组,慕名参与了学习.目前对于go是0基础,只知道它可以做高并发.效率快.编译简单.母语是C. go的安装有多种形式,编译安装是比较慢的一个,今天我就记录一下学习go编 ...
- leetcode: 最长上升子序列
题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 ...
- Linux平台Boost 1.6.7的编译方法
boost库下载地址:https://dl.bintray.com/boostorg/release/ 编译: 1. 获得bjam (1) # cd /usr/src/boost_1_67_0 (2) ...
- mapdb的适用场景介绍
对于大部分系统来说,mapdb并无太大价值,而且增加了成本.但是如果一级缓存巨大例如数以十GB级别,或占据了整个JVM的1/2以上,mapdb的价值就会体现出来.正如其官网介绍: MapDB prov ...
- OSPF协议介绍及配置
一.OSPF概述 回顾一下距离矢量路由协议的工作原理:运行距离矢量路由协议的路由器周期性的泛洪自己的路由表,通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中,而对于这个网 ...
- CentOS6非root用户下安装及配置CDH5.3.0
#install lsb packagesudo yum install -y redhat-lsb #install net-tools package sudo yum install -y ne ...
- ThinkPhp5 数据迁移(think-migration)
ThinkPhp5 数据迁移(think-migration) 在thinkphp5中提供了数据迁移工具(think-migration),它是机遇phinx开发(文档地址:http://docs ...
- springMVC返回json数据乱码问
在springMVC controller中返回json数据出现乱码问题,因为没有进行编码,只需要简单的注解就可以了 在@RequestMapping()中加入produces="text/ ...