题解 | #不同路径的数目(二)#
不同路径的数目(二)
https://www.nowcoder.com/practice/2bbfd075fbde4884b9da80634e1cae7c
2022.0906算法第56题不同路径的数目(二)
这道题对于做过不同路径的数目一,思路还是能够想到的
主要就是需要注意两点
1、初始化的时候,如果遇到障碍0的时候,0后面的数据都没法到达,需要赋值为0
2、当状态矩阵在进行递推时,如果遇到障碍0,则直接将该位置赋值为0,其余的情况不变依然时左边和上边相加
int uniquePathsWithObstacles(vector<vector<int> >& obstacleGrid) {
//状态矩阵,和网格的大小一致,表示到达i,j位置的路径数
vector<vector<int>> dp(obstacleGrid.size(),vector<int>(obstacleGrid[0].size(),0));
//初始化第一列,每个位置只有一条路,遇到0则直接跳出,后面还为0
for(int i=0;i<obstacleGrid.size();i++){
if(obstacleGrid[i][0]==0){
break;
}
dp[i][0]=1;
}
//初始化第一行,每个位置赋值为1,遇到0则直接跳出
for(int i=0;i<obstacleGrid[0].size();i++){
if(obstacleGrid[0][i]==0){
break;
}
dp[0][i]=1;
}
//循环状态矩阵,网格路径计算
for(int i=1;i<obstacleGrid.size();i++){
for(int j=1;j<obstacleGrid[0].size();j++){
//遇到障碍时,直接赋值0,无法到达
if(obstacleGrid[i][j]==0){
dp[i][j]=0;
//cout<<dp[i][j]<<endl;
}
//否则此位置还是等于左边和上班两个位置的路径数相加
else{
dp[i][j]=dp[i-1][j]+dp[i][j-1];
//cout<<dp[i][j]<<endl;
}
}
}
//返回路径数
return dp[obstacleGrid.size()-1][obstacleGrid[0].size()-1];
}
韶音科技公司氛围 640人发布