lintcode-115-不同的路径 II

115-不同的路径 II

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

注意事项

m 和 n 均不超过100

样例

如下所示在3x3的网格中有一个障碍物:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
一共有2条不同的路径从左上角到右下角。

标签

动态规划 数组

思路

延续lintcode-114-不同的路径的思路,在遇到障碍时,dp[i][j] = 0

code

class Solution {
public:
    /**
     * @param obstacleGrid: A list of lists of integers
     * @return: An integer
     */ 
    int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
        // write your code here
        if(obstacleGrid.size() <= 0 || obstacleGrid[0].size() <= 0) {
            return 0;
        }

        int m = obstacleGrid.size(), n = obstacleGrid[0].size();
        vector<vector<int> > dp(m, vector<int>(n, INT_MAX));
        for(int i=0; i<m; i++) {
            for(int j=0; j<n; j++) {
                if(obstacleGrid[i][j] == 1) {
                    dp[i][j] = 0;
                    continue;
                }
                if(i == 0 && j == 0) {
                    dp[i][j] = 1;
                }
                else if(i == 0 && j > 0) {
                    dp[i][j] = dp[i][j-1];
                }
                else if(i > 0 && j == 0) {
                    dp[i][j] = dp[i-1][j];
                }
                else if(i > 0 && j > 0) {
                    dp[i][j] = dp[i][j-1] + dp[i-1][j];
                }
            }
        }
        
        return dp[m-1][n-1];
    }
};
posted @ 2017-07-18 18:56  LiBaoquan  阅读(292)  评论(0编辑  收藏  举报