题目描述
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一样的场景设置,现在的问题变成了,多了一些障碍物,意思就是说有的路走不通了怎么办?
我的想法是,仍然是采取动态规划的办法,状态方程和之前那题是一样的,只需要在障碍点更新状态值就行了(直接将当前状态值重置为0),走不通的路会在更新的过程中被算法自动舍弃(置为0就是舍弃之前所有的unique,因为遇到障碍点,之前所有的unique path都没有意义了)。
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m=obstacleGrid.size(),n=obstacleGrid[0].size();
vector<int>cur(m,0);
for(int i=0;i<m;i++){
if(obstacleGrid[i][0]==1) break;//初始化第一列的值,如果发生了阻断下面的可能路径数都是0
cur[i]=1;
}
for(int j=1;j<n;j++){
if(obstacleGrid[0][j]==1) cur[0]=0;//如果顶端就发生了障碍的处理
for(int i=1;i<m;i++){
if(obstacleGrid[i][j]==1) cur[i]=0;//如果发生了阻断的处理
else cur[i]+=cur[i-1];
}
}
return cur[m-1];
}
};