码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 63.Unique Paths II

时间:2018-02-25 17:32:43      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:and   empty   problems   target   class   problem   题目   note   sid   

Follow up for "Unique Paths":

Now consider if some obstacles are added to the grids. How many unique paths would there be?

An obstacle and empty space is marked as 1 and 0 respectively in the grid.

For example,

There is one obstacle in the middle of a 3x3 grid as illustrated below.

[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]

The total number of unique paths is 2.

Note: m and n will be at most 100.

解题思路:

与62. Unique Paths有以下不同:
1. 当(i, j)有障碍时dp[i][j] = 0
2. dp[0][j]和dp[i][0]未必为1.
dp[0][j] = obstacleGrid[0][j] ? 0 : dp[0][j-1]
dp[i][0] = obstacleGrid[i][0] ? 0 : dp[i-1][0]
3. 当obstacleGrid [0][0] = 1时,return 0
 
Java:
 
class Solution {
  public int uniquePathsWithObstacles(int[][] obstacleGrid) {  
    int m = obstacleGrid.length;  
    int n = obstacleGrid[0].length;  

    if (m == 0 || n == 0) {  
      return 0; 
    }

    if (obstacleGrid[0][0] == 1 || obstacleGrid[m-1][n-1] == 1) { 
      return 0; 
    }

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

    dp[0][0] = 1;  
    for(int i = 1; i < n; i++){  
      if(obstacleGrid[0][i] == 1)  
        dp[0][i] = 0;  
      else 
        dp[0][i] = dp[0][i-1];  
    }  

    for(int i = 1; i < m; i++){  
      if(obstacleGrid[i][0] == 1)  
        dp[i][0] = 0;  
      else 
        dp[i][0] = dp[i-1][0];  
    }  

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

  

 类似题目:

 

[LeetCode] 63.Unique Paths II

标签:and   empty   problems   target   class   problem   题目   note   sid   

原文地址:https://www.cnblogs.com/lightwindy/p/8469303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!