1. 程式人生 > >63. Unique Paths II

63. Unique Paths II

esp TE obs pla IV bst i++ col pub

問題描述:

A robot is located at the top-left corner of a m x n grid (marked ‘Start‘ in the diagram below).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked ‘Finish‘ in the diagram below).

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.

Note: m and n will be at most 100.

Example 1:

Input:
[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]
Output: 2
Explanation:
There is one obstacle in the middle of the 3x3 grid above.
There are two ways to reach the bottom-right corner:
1. Right -> Right -> Down -> Down
2. Down -> Down -> Right -> Right

解題思路:

這道題跟Unique Path 的區別就是地圖中有障礙物出現,此時這個格子無法被到達。

仍然使用動態規劃進行求解,但是需要註意:

  1. 當起點為障礙物時,無法到達終點

  2. i = 0 和j = 0時不一定能夠到達,取決於其上或左邊能否被到達(錯在了這裏我:))

代碼:

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        if(obstacleGrid.empty() || obstacleGrid[0
].empty()) return 0; if(obstacleGrid[0][0] == 1) return 0; int m = obstacleGrid.size(); int n = obstacleGrid[0].size(); vector<vector<int>> dp(m, vector<int>(n, 0)); for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ if(i == 0 && j == 0){ dp[i][j] = 1; }else{ if(obstacleGrid[i][j] == 1) dp[i][j] = 0; else{ if(i - 1 >= 0){ dp[i][j] += dp[i-1][j]; }if(j-1 >= 0){ dp[i][j] += dp[i][j-1]; } } } } } return dp[m-1][n-1]; } };

63. Unique Paths II