算法分析与设计——LeetCode Problem.63 Unique Paths II
2017-12-28 23:36
531 查看
题目链接
问题描述
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
in the grid.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
The total number of unique paths is
Note: m and n will be at most 100.
解题思路
这题与Leetcode 62解决方法相似,可以新建一个与grid相同size的矩阵path。需要注意的是grid的最左边一列grid[i][0]和最上边一排grid[0][i]:从grid的左上角grid[0][0]开始,分别沿最左边和最上边遍历,直到遍历完整一行/列或者遇到数字1,在此之前要把path相应位置赋值为1。之后根据递推式path[i][j] = path[i-1][j] + path[i][j-1]遍历path矩阵即可,若所遍历的位置path[i][j]在grid矩阵中的相应位置grid[i][j]的值为1,则将path[i][j]的值赋为0即可。
代码如下
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
if(obstacleGrid.empty())
return 0;
int m = obstacleGrid.size();
if(obstacleGrid[0].empty())
return 0;
int n = obstacleGrid[0].size();
vector<vector<int> > path(m, vector<int>(n, 0));
for(int i = 0; i < m; i ++)
{
if(obstacleGrid[i][0] != 1)
path[i][0] = 1;
4000
else
break;
}
for(int i = 0; i < n; i ++)
{
if(obstacleGrid[0][i] != 1)
path[0][i] = 1;
else
break;
}
for(int i = 1; i < m; i ++)
{
for(int j = 1; j < n; j ++)
{
if(obstacleGrid[i][j] == 1)
path[i][j] = 0;
else
path[i][j] = path[i-1][j] + path[i][j-1];
}
}
return path[m-1][n-1];
}
};
问题描述
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
1and
0respectively
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.
解题思路
这题与Leetcode 62解决方法相似,可以新建一个与grid相同size的矩阵path。需要注意的是grid的最左边一列grid[i][0]和最上边一排grid[0][i]:从grid的左上角grid[0][0]开始,分别沿最左边和最上边遍历,直到遍历完整一行/列或者遇到数字1,在此之前要把path相应位置赋值为1。之后根据递推式path[i][j] = path[i-1][j] + path[i][j-1]遍历path矩阵即可,若所遍历的位置path[i][j]在grid矩阵中的相应位置grid[i][j]的值为1,则将path[i][j]的值赋为0即可。
代码如下
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
if(obstacleGrid.empty())
return 0;
int m = obstacleGrid.size();
if(obstacleGrid[0].empty())
return 0;
int n = obstacleGrid[0].size();
vector<vector<int> > path(m, vector<int>(n, 0));
for(int i = 0; i < m; i ++)
{
if(obstacleGrid[i][0] != 1)
path[i][0] = 1;
4000
else
break;
}
for(int i = 0; i < n; i ++)
{
if(obstacleGrid[0][i] != 1)
path[0][i] = 1;
else
break;
}
for(int i = 1; i < m; i ++)
{
for(int j = 1; j < n; j ++)
{
if(obstacleGrid[i][j] == 1)
path[i][j] = 0;
else
path[i][j] = path[i-1][j] + path[i][j-1];
}
}
return path[m-1][n-1];
}
};
相关文章推荐
- 算法分析与设计——LeetCode Problem.213 House Robber II
- [算法分析与设计] leetcode 每周一题: 126. Word Ladder II
- 算法分析与设计——LeetCode:63. Unique Paths II
- 算法分析与设计——LeetCode Problem.598 Range Addition II
- 【LeetCode-面试算法经典-Java实现】【063-Unique Paths II(唯一路径问题II)】
- 算法分析与设计第五周习题:95. Unique Binary Search Trees II
- 【LeetCode-面试算法经典-Java实现】【063-Unique Paths II(唯一路径问题II)】
- LeetCode题库解答与分析——#63.不同路径IIUniquePathsII
- (算法分析Week12)Unique Paths II[Medium]
- 算法分析与设计课程(19):【leetcode】Ugly Number II
- Unique Paths II [LeetCode]
- 【LeetCode】Unique Paths II
- 【LeetCode】Unique Paths II
- LeetCode -- Unique Paths II
- leetcode_question_63 Unique Paths II
- leetcode--Unique Paths II
- LeetCode:Unique Paths II
- leetcode - Unique Paths II
- [算法分析与设计] leetcode 每周一题: Contains Duplicate III
- LeetCode 63 Unique Paths II