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