类似的题:leetcode62.不同路径(中等)
https://blog.csdn.net/zhangjiaji111/article/details/121802934
思路:dp
dp[i][j]表示[0][0]到[i][j]的路径数,这样能滚动数组优化
转移方程:dp[i][j]=dp[i-1][j]+dp[i][j-1]
边界:dp[0][0] = (obstacleGrid[0][j] == 0); dp[0][1…m-1]初始化从左边得到
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& v) {
int n = v.size(), m = v[0].size();
vector<int> dp(m);
if (v[i][j] != 1) dp[0] = 1; //如果第一个是障碍则赋值为0
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) { //这里不能从1开始,因为dp[][0]应该是0要更新
if (v[i][j] == 1) dp[j] = 0;
else if (j >= 1) dp[j] = dp[j] + dp[j - 1];
}
}
return dp[m - 1];
}
};
注意两点:(1)dp[0][0]为0时return 0 (2)dp[n-1][m-1]为0时也return 0