题目描述 :
解题思路 : 机器人每次只能向下或者向右走 , 我们可以用一个二维数组记录机器人每走到一个位置时 , 所经历的可能性 , 而当它走到一个位置时所经历的可能性就是( x-1 , y )和 (x ,y-1 ) 走法之和 , 但是这里有一个问题就是遇到障碍物是如何计算
如下图所示 : 当我们遇到障碍物时就将障碍物坐标对应的位置赋0 , 当我们在处理第一行和第一列时 , 会发现只要再第一行或第一列出现了一个障碍物时 , 那么该障碍物后边的路将会被封死 , 所以我们只需要将第一行和第一列特殊处理 , 然后再按照不同路径I 的做法处理即可 :
代码如下 :
int uniquePathsWithObstacles(int** a ,int Row, int Col) {
//如果第一个位置就是障碍时,就不可能到达终点
if(a[0][0]==1)
return 0;
int n[Row][Col];
int i=0,j=0;
//处理第一行
while(i<Col){
if(a[0][i]==0){
n[0][i]=1;
i++;
}
else
while(i<Col){
n[0][i]=0;
i++;
}
}
//处理第一列
while(j<Row){
if(a[j][0]==0){
n[j][0]=1;
j++;
}
else
while(j<Row){
n[j][0]=0;
j++;
}
}
for(i=1;i<Row;i++)
for(j=1;j<Col;j++){
if(a[i][j]==1)
n[i][j]=0;
else
n[i][j]=n[i-1][j]+n[i][j-1];
}
return n[Row-1][Col-1];
}