4题目说明
采用动态规划代码
1.首先定义一个dp数组,dp[i][j] 表示从(0,0)到(i-1,j-1)的最短不同路径个数;
2 dp数组初始化:分别用两个for循环对dp[i][0],dp[0][j] 初始化;
3 更新,如果obstacleGrid[i][j] 是1 ,不做变化,否则有如下更新:
dp[i][j] = dp[i][j-1]+dp[i-1][j];
4 返回 dp[m-1][n-1] 即可
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m=obstacleGrid.size();
int n = obstacleGrid[0].size();
vector<vector<int>> dp(m,vector<int>(n,0));
for(int i=0;i<m;i++)
{
if(!obstacleGrid[i][0])
{
dp[i][0]=1;
}
else break;
}
for(int j=0;j<n;j++)
{
if(!obstacleGrid[0][j])
{
dp[0][j]=1;
}
else break;
}
for(int i=1;i< m;i++)
for(int j=1;j<n;j++)
{
if(obstacleGrid[i][j]) continue;
dp[i][j] = dp[i][j-1]+dp[i-1][j];
}
return dp[m-1][n-1];
}
};