63.不同路径II

作者: 第四单元 | 来源:发表于2018-03-28 09:59 被阅读10次

题目

不同路劲的进阶问题。考虑网格中有障碍物,同样求从左上角到右下角的路径数。
1表示障碍物,0表示空位置。
题目连接

思路

和不同路径同样的思路,只不过要专门处理有障碍的位置。
首先,对于任何有障碍的位置,因为其不可达,所有dp=0
其次,对于第一行和第一列,如果某个位置有障碍,则其后的位置(同一行、列)都是不可达的,应该设置dp=0。

代码

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;

        int[][] dp = new int[m][n];

        int firstOne = -1;
        for(int i = 0; i < m; i++) {
            if(obstacleGrid[i][0] == 1) {
                firstOne = i;
                break;
            }
        }
        // System.out.println(firstOne);
        for(int i = 0; i < m; i++) dp[i][0] = 1;
        if(firstOne != -1)
            while(firstOne < m) dp[firstOne++][0] = 0;
        firstOne = -1;
        for(int j = 0; j < n; j++) {
            if(obstacleGrid[0][j] == 1) {
                firstOne = j;
                break;
            }
        }
        // System.out.println(firstOne);

        for(int j = 0; j < n; j++) dp[0][j] = 1;
        if(firstOne != -1)
            while(firstOne < n) dp[0][firstOne++] = 0;

        for(int i = 1; i < m; i++)
            for(int j = 1; j < n; j++) {
                dp[i][j] = (obstacleGrid[i][j] == 1)?0:(dp[i-1][j] + dp[i][j-1]);
            }
        return dp[m-1][n-1];
    }
}

相关文章

网友评论

    本文标题:63.不同路径II

    本文链接:https://www.haomeiwen.com/subject/axcycftx.html