题目
来源:不同路径II
题目:
示例
解题思路及代码
1.思路
设网格为m*n维,到达某一格的路径总和等于到达其左边格子的路径和加上到达其上边格子的路径和,所以我们只需要知道某一格左边格子的信息和上边格子的信息即可。初始化一个长度为n的1维数组cur,cur代表每一行的n个格子,其中每个元素代表到达每一行中的每个格子的路径数。cur的每个元素初始化为0,因为对于每一行来说,若有一个格子有障碍,其右边所有的格子都不能通过这个格子到达。同时初始化cur的第一个元素为1,即代表出发点。cur的更新公式为 cur[j] += cur[j-1]; 每次循环前cur的每个元素,代表了每个格子的上边格子的信息,循环开始后,cur的每一个元素加上其左边元素(如果存在)的值,即可实现 上边 + 左边,
2.代码
var uniquePathsWithObstacles = function(obstacleGrid) {
var m = obstacleGrid.length;
var n = obstacleGrid[0].length;
var cur = new Array(n).fill(0);
cur[0] = 1;
for (var i = 0; i < m; i++) {
for (var j = 0; j < n; j++) {
if (obstacleGrid[i][j] == 1) {
cur[j] = 0;
} else if (j > 0) {
cur[j] += cur[j-1];
}
}
}
return cur[n - 1];
};