您的位置:首页 > 产品设计 > UI/UE

(算法分析Week12)Unique Paths II[Medium]

2017-11-26 14:31 267 查看

63.Unique Paths II[Medium]

题目来源

Description

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.

Solution

增添了限制条件,有部分格子有障碍,不能走。

由于规则是只能往右和往下,所以若(i,j)位置有障碍,那么(i, j)这个位置就不可达(相当于没有贡献),因此不能用原来的递归式,直接取等于0即可,剩下的代码基本上没有变化,初始化边界上行和列时,出现障碍,后面路径数都是0,所以不能直接把边界上的行和列赋值为1.

注意数组的初始化和dp数组与obstacle数组的对应关系。

obstacle从0开始,dp数组下标从1开始。

Complexity analysis

O(mn)

Code

class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
int arr[m+1][n+1];
//注意初始化
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
arr[i][j] = 0;
}
}
arr[0][1] = 1;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
//下标对应,要相应减一
if (obstacleGrid[i-1][j-1] == 1)
arr[i][j] = 0;
else arr[i][j] = arr[i-1][j] + arr[i][j-1];

}
}
return arr[m]
;
}
};


Result

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: