您的位置:首页 > 编程语言 > C语言/C++

LeetCode 63 — Unique Paths II(C++ Java Python)

2014-02-25 22:19 716 查看
题目:http://oj.leetcode.com/problems/unique-paths-ii/

Follow up for "Unique Paths":

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"续:

现在考虑如果在网格中添加一些障碍,会有多少种不同的路径?

网格中分别用1和0标记障碍物和空的网格。

例如,

下图所示的3 x 3方格的中间有一个障碍。

不同的路径总数为2。

注意:m和n最大为​​100。

分析:

        有障碍的地方路径数为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]
;

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

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