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

63. Unique Paths II

2015-07-30 13:09 387 查看
此题与Unique Paths的解法一样,f[j]表示从(0,0)到(当前row, j)有几种走法,上面来的就是自己,左边来的已经算好了,所以 f[j] = f[j] + f[j – 1]。需要特别注意f的初始化值和循环的起始值。下面的这段代码非常精妙,需要好好理解掌握。代码如下:

class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = (int)obstacleGrid.size(), n = (int)obstacleGrid[0].size();
// one way DP, f[i] means from (0, 0) to (currRow, i) has how many ways
vector<int> f(n, 0);
f[0] = obstacleGrid[0][0] ? 0 : 1;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) { //comes from above or left
if (obstacleGrid[i][j]) {
f[j] = 0;
} else {
if (j == 0) //first col only from above
f[j] = f[j];
else
f[j] = f[j] + f[j - 1]; //这一行代码逻辑非常微妙
}
}
}
return f[n - 1];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: