【leetcode】Unique Paths II

来源:互联网 发布:域名怎么解析两个IP 编辑:程序博客网 时间:2024/04/29 09:01

Question

Q

Tips

I think still use dynamic programming.

class Solution {public:    int uniquePathsWithObstacles(vector<vector<int> >& obstacleGrid) {        int m = obstacleGrid.size();        int n = obstacleGrid[0].size();        if(obstacleGrid[m-1][n-1]!=0)            return 0;        if(n==1 && m==1)            if(obstacleGrid[0][0]==0)                return 1;            else                 return 0;        int **res;        res = new int*[m];        for(int i = 0; i < m; ++i)            res[i] = new int[n];            for(int i=0;i<m;++i)            for(int j=0;j<n;++j)                res[i][j]=0;        //Initialize        for(int i = n-2; i >= 0; --i)            if(obstacleGrid[m-1][i] != 0)                break;            else                res[m-1][i]=1;        for(int i = m-2; i >= 0; --i)            if(obstacleGrid[i][n-1] != 0)                break;            else                res[i][n-1] = 1;        //Bottom to top        int row = m-2, col = n-2;        while(row>=0 && col>=0){            for(int i = row; i>=0;--i)                if(obstacleGrid[i][col] != 0)                    continue;                else{                    if(obstacleGrid[i+1][col]==0)                        res[i][col]+=res[i+1][col];                    if(obstacleGrid[i][col+1]==0)                        res[i][col]+=res[i][col+1];                }            for(int i=col-1;i>=0;--i)                if(obstacleGrid[row][i]!=0)                    continue;                else{                    if(obstacleGrid[row][i+1]==0)                        res[row][i]+=res[row][i+1];                    if(obstacleGrid[row+1][i]==0)                        res[row][i]+=res[row+1][i];                }            --col;            --row;          }        return res[0][0];    }};
0 0
原创粉丝点击