题解 | #不同路径的数目(二)#

不同路径的数目(二)

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];
}


#算法题#
全部评论

相关推荐

点赞 评论 收藏
转发
永联 dsp工程师 15k*15 双非硕士
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务