# 不同路径 II

<p>一个机器人位于一个 <em>m x n </em>网格的左上角 （起始点在下图中标记为“Start” ）。</p>
<p>机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角（在下图中标记为“Finish”）。</p>
<p>现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径？</p>
<p><img src="https://img-service.csdnimg.cn/img_convert/dcc604a2757b6fd0e6bdc5155c945ffc.png"
        style="height: 183px; width: 400px;" /></p>
<p>网格中的障碍物和空位置分别用 <code>1</code> 和 <code>0</code> 来表示。</p>
<p> </p>
<p><strong>示例 1：</strong></p><img alt=""
    src="https://img-service.csdnimg.cn/img_convert/d127c16fad8048e19db6f2a2bea73240.jpeg"
    style="width: 242px; height: 242px;" />
<pre><strong>输入：</strong>obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]<strong><br />输出：</strong>2<strong><br />解释：</strong>3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同的路径：<br />1. 向右 -> 向右 -> 向下 -> 向下<br />2. 向下 -> 向下 -> 向右 -> 向右</pre>
<p><strong>示例 2：</strong></p><img alt=""
    src="https://img-service.csdnimg.cn/img_convert/d95382b3c9b30e83be3e383421106a67.jpeg"
    style="width: 162px; height: 162px;" />
<pre><strong>输入：</strong>obstacleGrid = [[0,1],[0,0]]<strong><br />输出：</strong>1</pre>
<p> </p>
<p><strong>提示：</strong></p>
<ul>
    <li><code>m == obstacleGrid.length</code></li>
    <li><code>n == obstacleGrid[i].length</code></li>
    <li><code>1 <= m, n <= 100</code></li>
    <li><code>obstacleGrid[i][j]</code> 为 <code>0</code> 或 <code>1</code></li>
</ul>

## template

```java
public class Solution {
	public int uniquePathsWithObstacles(int[][] obstacleGrid) {
		int m = obstacleGrid.length;
		int n = obstacleGrid[0].length;
		if (obstacleGrid[0][0] == 1) {
			return 0;
		} else if (m == 1 && n == 1) {
			return 1;
		}
		int[][] paths = new int[m][n];
		for (int i = 0; i < m; ++i) {
			if (obstacleGrid[i][0] == 1) {
				while (i < m) {
					paths[i][0] = 0;
					++i;
				}
				break;
			} else {
				paths[i][0] = 1;
			}
		}
		for (int j = 1; j < n; ++j) {
			if (obstacleGrid[0][j] == 1) {
				while (j < n) {
					paths[0][j] = 0;
					++j;
				}
				break;
			} else {
				paths[0][j] = 1;
			}
		}
		for (int i = 1; i < m; ++i)
			for (int j = 1; j < n; ++j) {
				if (obstacleGrid[i][j] == 1) {
					paths[i][j] = 0;
				} else {
					paths[i][j] = paths[i][j - 1] + paths[i - 1][j];
				}
			}
		return paths[m - 1][n - 1];
	}
}
```

## 答案

```java

```

## 选项

### A

```java

```

### B

```java

```

### C

```java

```