LeetCode 63. Unique Paths II

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).ide

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

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

Note: m and n will be at most 100.blog

Example 1:it

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

 

解答:io

這道題和62很類似,區別在於多了障礙物,不過仍然是用動態對規劃的方式,有障礙物的位置對路線數量的貢獻爲0,更新方法仍然相似,不過能夠直接在原來數組上進行更新,不須要新開闢空間class

代碼以下:grid

 1 class Solution {
 2 public:
 3     int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
 4         if (obstacleGrid[0][0] == 1)
 5             return 0;
 6         int row = obstacleGrid.size();
 7         int col = obstacleGrid[0].size();
 8         obstacleGrid[0][0] = 1;
 9         for (int i = 1; i < row; i++)
10         {
11             if (obstacleGrid[i][0] == 0)
12                 obstacleGrid[i][0] = obstacleGrid[i - 1][0];
13             else 
14                 obstacleGrid[i][0] = 0;
15         }
16         for (int i = 1; i < col; i++)
17         {
18             if (obstacleGrid[0][i] == 0)
19                 obstacleGrid[0][i] = obstacleGrid[0][i - 1];
20             else 
21                 obstacleGrid[0][i] = 0;
22         }
23         for (int i = 1; i < row; i++)
24             for (int j = 1; j < col; j++)
25             {
26                 if (obstacleGrid[i][j] == 0)
27                     obstacleGrid[i][j] = obstacleGrid[i - 1][j] + obstacleGrid[i][j - 1];
28                 else
29                     obstacleGrid[i][j] = 0;
30             }
31         return obstacleGrid[row - 1][col - 1];
32                 
33     }
34 };

時間複雜度:O(m*n)方法

空間複雜度:O(1)

相關文章
相關標籤/搜索