# LeetCode 63 — Unique Paths II（C++ Java Python）

Now consider if some obstacles are added to the grids. How many unique paths would there be?

An obstacle and empty space is marked as 1 and 0 respectively in the grid.

For example,

There is one obstacle in the middle of a 3x3 grid as illustrated below.

[
[0,0,0],
[0,1,0],
[0,0,0]
]


The total number of unique paths is 2.

Note: m and n will be at most 100.

"Unique Paths"续：

有障碍的地方路径数为0。

C++实现：

class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();

if(obstacleGrid[0][0] == 1)
{
return 0;
}
else if(m == 1 && n == 1)
{
return 1;
}

int paths[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实现：

public class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length;
// if (m == 0) {
// 	   return 0;
// }

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];
}
}

Python实现：

class Solution:
# @param obstacleGrid, a list of lists of integers
# @return an integer
def uniquePathsWithObstacles(self, obstacleGrid):
m = len(obstacleGrid)
n = len(obstacleGrid[0])

if obstacleGrid[0][0] == 1:
return 0
elif m == 1 and n == 1:
return 1

paths = [[] for i in range(m)]

for i in range(m):
if obstacleGrid[i][0] == 1:
while(i < m):
paths[i].append(0)
i += 1
break;
else:
paths[i].append(1)

for j in range(1, n):
if obstacleGrid[0][j] == 1:
while(j < n):
paths[0].append(0)
j += 1
break;
else:
paths[0].append(1)

for i in range(1, m):
for j in range(1, n):
if obstacleGrid[i][j] == 1:
paths[i].append(0)
else:
paths[i].append(paths[i][j - 1] + paths[i - 1][j])

return paths[m - 1][n - 1]

感谢阅读，欢迎评论！

• 本文已收录于以下专栏：

举报原因： 您举报文章：LeetCode 63 — Unique Paths II（C++ Java Python） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)