- 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
- class Solution {
- public:
- int caluniquePaths(vector<vector<int>>&obstacleGrid,vector<vector<int>>&mark,int m, int n) {
- int down = 0, right = 0;
- if (mark[m][n] != -1)return mark[m][n];
- int orim = obstacleGrid.size(), orin = obstacleGrid[0].size();
- if (obstacleGrid[orim-m][orin-n] == 1) {
- mark[m][n] = 0;
- return 0;
- }
- if (m> 1)
- down = caluniquePaths(obstacleGrid,mark, m - 1, n);
- if (n> 1)
- right = caluniquePaths(obstacleGrid,mark, m, n - 1);
- mark[m][n] = down + right;
- return mark[m][n];
- }
- int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
- int m = obstacleGrid.size(), n = obstacleGrid[0].size();
- vector<vector<int>>mark(m+1, vector<int>(n+1, -1));
- mark[1][1] = !obstacleGrid[m-1][n-1];
- return caluniquePaths(obstacleGrid,mark, m, n);
- }
- };
- View Code
来源: http://www.bubuko.com/infodetail-2949998.html