思路:动态规划方法。 路径数目 ret[i][j] = ret[i-1][j] + ret[i][j-1]
(1) 注意边界和障碍的判断,如果是障碍点,为0;
(2) 注意返回值会溢出。
int uniquePathsWithObstacles(vector<vector<int>>& grid) {
int m = grid.size();
if(m==0) return 0;
int n = grid[0].size();
if(n==0) return 0;
if(grid[m-1][n-1] == 1 || grid[0][0] == 1) {
return 0;
}
vector<int> tmp(n,0);
vector<vector<int>> ret(m,tmp);
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
//cout<<"i="<<i<<",j="<<j<<endl;
if(i==0 && j==0)
ret[i][j] = 1;
else {
if(grid[i][j] == 0) {
long num = 0;
if(j-1>=0) //left
num += ret[i][j-1];
if(num > INT_MAX) {
ret[i][j] = INT_MAX;
continue;
}
if(i-1>=0)
num += ret[i-1][j];
if(num > INT_MAX) {
ret[i][j] = INT_MAX;
continue;
}
ret[i][j] = num;
//cout<<"i="<<i<<",j="<<j<<",num="<<num<<endl;
}
}
}
}
return ret[m-1][n-1];
}
本文介绍了一种使用动态规划方法解决网格中带有障碍物的路径计数问题。通过构建二维数组记录到达每个点的路径数目,考虑边界条件和障碍物的影响,实现了路径计数的高效计算。

513

被折叠的 条评论
为什么被折叠?



