示例 1:

输入:
[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]
输出: 2
解释:
3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右 思路分析这个问题和上一篇路径题的分析一样,不同之处在于,加了障碍物。那么我们可以重新定义一个二维数组,用来返回路径数,具体思路见代码注释。
public static int uniquePathsWithObstacles(int[][] arr) {
int m = arr.length;
int n = arr[0].length;
//如果起始位置和终点位置为1,直接返回0
if(arr[0][0] == 1 || arr[m-1][n-1] == 1) return 0;
//如果m == 1,判断第m-1行是不是有1,有1直接返回0,否则返回1
if(m == 1) {
for(int j = 1;j<n;j++) {
if(arr[0][j] == 1)
return 0;
}
return 1;
}
//如果n == 1,判断第n-1列是不是有1,有1直接返回0,否则返回1
if(n == 1) {
for(int i = 1;i < m;i++) {
if(arr[i][0] == 1)
return 0;
}
return 1;
}
//定义和输入数组arr一样大小的数组,作为判断
int[][] array = new int[m][n];
for(int j = 1;j<n;j++) {
//判断arr[0][j]是否等于1,如果不等于1,那么array[0][j]等于0,如果等于1,
//从j列开始到j<n,array[0][j]全部赋值为0
if(arr[0][j] == 0) {
array[0][j] = 1;
}else {
for(int k = j;k<n;k++) {
array[0][k] = 0;
}
break;
}
} for(int i = 1;i<m;i++) {
//判断arr[i][0]是否等于1,如果不等于1,那么array[i][0]等于0,如果等于1,
//从i行开始到i<m,array[i][0]全部赋值为0
if(arr[i][0] == 0) {
array[i][0] = 1;
}else {
for(int k = i;k<m;k++) {
array[k][0] = 0;
}
break;
}
} for(int i = 1;i<m;i++) {
for(int j = 1;j<n;j++) {
//如果arr[i][j] == 1,array = 0,否则array[i][j] = array[i-1][j] + array[i][j - 1]
if(arr[i][j] == 0) {
array[i][j] = array[i-1][j] + array[i][j - 1];
}
}
}
//返回数组array最后一个数
return array[m-1][n-1];
}
 

不同路径II(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。)的更多相关文章

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

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

  2. 不同路径(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径?)

    示例 1: 输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角. 1. 向右 -> 向右 -> 向下 2. 向右 -> 向下 -&g ...

  3. LeetCode:不同路径&不同路径II

    不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问 ...

  4. [LeetCode] 63. 不同路径 II ☆☆☆(动态规划)

    描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 现在 ...

  5. Leetcode之动态规划(DP)专题-63. 不同路径 II(Unique Paths II)

    Leetcode之动态规划(DP)专题-63. 不同路径 II(Unique Paths II) 初级题目:Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths) 一个机 ...

  6. Java实现 LeetCode 63 不同路径 II(二)

    63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在 ...

  7. 刷题-力扣-63. 不同路径 II

    63. 不同路径 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/unique-paths-ii/ 著作权归领扣网络所有.商业转 ...

  8. [Swift]LeetCode63. 不同路径 II | Unique Paths II

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  9. LeetCode(63):不同路径 II

    Medium! 题目描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“F ...

随机推荐

  1. 如何查看当前应用包名和activity

    这里提供一个简单的方法来获取package和activity: 在Android模拟器上打开微信APP,然后打开CMD,输入以下命令: adb shell 接下来在#后面继续输入以下命令: logca ...

  2. ajax返回的欧洲字符(例如:法文)乱码

    ajax返回值的乱码现象产生的相关代码如下: Java代码: JsonObject jsonObject = new JsonObject(); jsonObject.addProperty(&quo ...

  3. [Linux][HTTP] Cookie和Set-Cookie

    HTTP 请求报文通过Cookie字段通知服务端当前页面的域生效中的cookie; GET /my/login.php HTTP/1.1 Host: 192.168.88.207:91 Connect ...

  4. Hystrix浅谈

    Hystrix如何使用很多说明,看了很多博客,却发现能说明一些简单概念的文章就没有. 所以本文不太回去说如何使用 Hystrix ,但是会简明的说一下 一些概念 super(Setter.withGr ...

  5. disk2vhd-----将windows系统转换成虚拟镜像格式

    工具介绍 下载url:http://technet.microsoft.com/en-us/sysinternals/ee656415.aspx disk2vhd是一个非常小的P2V转换工具,可以将你 ...

  6. VUE 密码验证与提示

    1. 概述 1.1 说明 vue项目中,为了较为明了的让用户看到所输入的密码信息的长度与复杂度是否满足要求,开发一个组件来满足此需求(当密码输入时进行密码验证操作,当密码的长度在8到24位之间,密码中 ...

  7. nginx的location、rewrite玩法详解

      1. location正则写法 一个示例: 1234567891011121314151617181920212223242526272829303132333435363738394041424 ...

  8. 关于如何实现Android透明状态栏的总结

    开门见山. 原来做的效果,如下图(顶部有一条明显的橙色状态栏):   a1.gif 改过之后(顶部状态栏是透明的):   p2.gif 我发现网上写的一些文章,不够简洁明了,我整理了一下,复制粘贴一下 ...

  9. 【Linux】系统基本命令

    # lsb_release -a 查看系统版本# uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cp ...

  10. plugin-barcodescanner 报错

    https://github.com/phonegap/phonegap-plugin-barcodescanner/issues/418 ionic cordova platform rm andr ...