您的位置:首页 > 其它

不同的路径 II

2018-01-29 15:43 169 查看
"不同的路径" 的跟进问题:
现在考虑网格中有障碍物,那样将会有多少条不同的路径?
网格中的障碍和空位置分别用 1 和 0 来表示。


 注意事项


m 和 n 均不超过100

您在真实的面试中是否遇到过这个题? 

Yes

样例

如下所示在3x3的网格中有一个障碍物:
[
[0,0,0],
[0,1,0],
[0,0,0]
]

一共有2条不同的路径从左上角到右下角。
class Solution {

public:

    /*

     * @param obstacleGrid: A list of lists of integers

     * @return: An integer

     */

    int uniquePathsWithObstacles(vector<vector<int>> &obstacleGrid) {

        // write your code 

        int m=obstacleGrid.size(),n=obstacleGrid[0].size();

        int a[m]
;

        if(obstacleGrid[0][0]==1){

            return 0;

        }

        for(int i=0;i<obstacleGrid.size();i++){

            for(int j=0;j<obstacleGrid[0].size();j++){

                if(obstacleGrid[i][j]==1){

                    a[i][j]=-1;

                }

            }

        }

        int mh=0;

        for(int i=0;i<m;i++){

            if(a[i][0]==-1){

                mh=1;

            }

            if(mh==0){

            a[i][0]=1;

            }else{

                a[i][0]=0;

            }

        }

        mh=0;

        for(int i=0;i<n;i++){

            if(a[0][i]==-1){

                mh=1;

            }

            if(mh==0){

            a[0][i]=1;

            }else{

                a[0][i]=0;

            }

        }

        for(int i=1;i<m;i++){

            for(int j=1;j<n;j++){

                if(a[i][j]==-1){

                    a[i][j]=0;

                }else{

                a[i][j]=a[i-1][j]+a[i][j-1];

                }

            }

        }

        return a[m-1][n-1];

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: