题目要求
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 Path题目系列。关于Unique Path I
请参考我的这篇博客。相比于I,这里添加的需求是说,某些节点上存在路障。存在路障的节点会在数组中被标记为1。请问从起点到终点有多少条独立路径。
思路和代码
在Unique Path I
的思路基础上,我们可以知道,如果某个节点上存在路障,那么任何从该节点前往终点的路径都将不存在。也就是说,该节点的路径数为0。在此基础上,我们可以知道,如果该节点为路障,则该节点路径数为0,否则该节点的路径数等于左侧节点路径数和上方节点路径数的和。代码如下:
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int row = obstacleGrid.length;
if(row==0){
return 0;
}
int column = obstacleGrid[0].length;
int path = obstacleGrid[0][0] == 1 ? 0 : 1;
for(int i = 1 ; i<row ; i++){
if(obstacleGrid[i][0] == 1){
path = 0;
}
obstacleGrid[i][0] = path;
}
path = 1;
for(int i = 0 ; i<column ; i++){
if(obstacleGrid[0][i] == 1){
path = 0;
}
obstacleGrid[0][i] = path;
}
for(int i = 1 ; i<row ; i++){
for(int j = 1 ; j<column ; j++){
if(obstacleGrid[i][j] == 1){
obstacleGrid[i][j] = 0;
}else{
obstacleGrid[i][j] = obstacleGrid[i][j-1] + obstacleGrid[i-1][j];
}
}
}
return obstacleGrid[row-1][column-1];
}
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。