给定一个包含非负整数的 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 和 的值均不超过 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 和 的值均不超过 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 动态规划】 不同路径,最小路径和的更多相关文章

  1. [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 ...

  2. [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 ...

  3. LeetCode 62,从动态规划想到更好的解法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第36篇文章,我们一起来看下LeetCode的62题,Unique Paths. 题意 其实这是一道老掉牙的题目了 ...

  4. 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 ...

  5. leetcode@ [62/63] Unique Paths II

    class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleG ...

  6. 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 ...

  7. [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 ...

  8. (step6.3.4)hdu 1151(Air Raid——最小路径覆盖)

    题意:     一个镇里所有的路都是单向路且不会组成回路. 派一些伞兵去那个镇里,要到达所有的路口,有一些或者没有伞兵可以不去那些路口,只要其他人能完成这个任务.每个在一个路口着陆了的伞兵可以沿着街去 ...

  9. Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum)

    Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum) 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. ...

  10. leetcode 64. 最小路径和 动态规划系列

    目录 1. leetcode 64. 最小路径和 1.1. 暴力 1.2. 二维动态规划 2. 完整代码及执行结果 2.1. 执行结果 1. leetcode 64. 最小路径和 给定一个包含非负整数 ...

随机推荐

  1. ring3 x32挂起进程注入原理.

    目录 一丶挂起进程注入简介与前言 二丶ShellCode核心讲解. 2.1 保存Contex.EIP 2.2 DLL路径重定位 2.3 LoadLibrary的重定位 三丶 全部C++代码.拷贝即可使 ...

  2. 第10组 Alpha冲刺(2/4)

    队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 继续学习Android studio和Java 完善项目APP原型 展示GitHub当日代码/文档签入记 ...

  3. WPF——OXY绘图

    private PlotModel _plotModel; public PlotModel plotModel { get { return _plotModel; } set { _plotMod ...

  4. docker之网络桥接的两种方式

    第一种:直接敲命令方式配置安装网桥管理工具包:bridge-utile # yum install bridge-utils -y 1.先查看ip 是否有br0ip a2.brctl show 3使用 ...

  5. eclipse修改代码没用、debug无法进断点、

    设置eclipse自动编译代码 处理tomcat不进断点问题 添加需要debug的项目 以上操作还是不行的话   可以把tomcat删除重新添加试试看

  6. mvn常见参数命令讲解

    关于-N -N,--non-recursive Do not recurse into sub-projects 意思是,不递归到子项目(子模块). 举例: 一个父项目下Father面有3个子项目A. ...

  7. SAS 获取系统选项设置的过程步 PROC OPTIONS OPTION=()

    PROC OPTIONS OPTION=(VALIDVARNAME LS);RUN;

  8. [转]import xxx from 和 import {xxx} from的区别

    原文地址:https://www.cnblogs.com/Abner5/p/7256043.html 1.vue import FunName from ‘../xxx’ 1.js export de ...

  9. 关于“javax.servlet.include.request_uri”属性值 include 请求 RequestDispatcher.include

    在springMVC的DispatcherServlet类的doService方法中有如下代码: 1 2 3 4 5 6 7 8 9 10 if (WebUtils.isIncludeRequest( ...

  10. [转][c++]关于构造函数不能有返回类型的错误

    转自:https://blog.csdn.net/sky_freebird/article/details/6687892 构造函数不能有返回类型,可是自己定义的构造函数本来就没写返回类型啊. 最后发 ...