题目描述
题解思路:
这道题可以采用动态规划的思想,因为只能向下向右走,所以某一点的路径数为其下方结点的路径数加上右方结点的路径数,根据这个思想,可以从下往上,从右往左一排一排扫描,最终得到起点的路径数
代码如下(java)
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int x_length = obstacleGrid.length, y_length = obstacleGrid[0].length;
int[][] counts = new int[x_length+1][y_length+1]; //多出一圈,可以简化代码,实际上可以去除,空间消耗会稍微减少
counts[x_length][y_length-1] = 1; //路径值初始化,这里是为了在后面的循环中使终点的路径为1
for (int x = x_length-1; x >= 0; x--){
for (int y = y_length-1; y >= 0; y--){
if (obstacleGrid[x][y] == 0)
counts[x][y] = counts[x+1][y] + counts[x][y+1]; //如果没有障碍,路径值为下方和右方路径值的和
else counts[x][y] = 0; //如果有障碍,路径值为0
}
}
return counts[0][0];
}
}