63. Unique Paths II
阿新 • • 發佈:2018-06-03
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