Unique Paths II
Post
Cancel

# LeetCode #63: Unique Paths II (C/C++).

medium

source: https://leetcode.com/problems/unique-paths-ii/
C/C++ Solution to LeetCode problem 63. Unique Paths II.

## Problem

You are given an m x n integer array grid. There is a robot initially located at the top-left corner (i.e., grid[0][0]). The robot tries to move to the bottom-right corner (i.e., grid[m - 1][n - 1]). The robot can only move either down or right at any point in time.

An obstacle and space are marked as 1 or 0 respectively in grid. A path that the robot takes cannot include any square that is an obstacle.

Return the number of possible unique paths that the robot can take to reach the bottom-right corner.

The test cases are generated so that the answer will be less than or equal to 2 * 109.

## Examples

### Example 1:

Input: obstacleGrid = [[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

### Example 2:

Input: obstacleGrid = [[0,1],[0,0]]
Output: 1

## Constraints

• m == obstacleGrid.length
• n == obstacleGrid[i].length
• 1 <= m, n <= 100
• obstacleGrid[i][j] is 0 or 1.

## Solution

Same solution as for problem 62 with two differences:

1. Check if the goal position has an obstacle.
2. Need to check if the board/grid has a 1 at the current position.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 class Solution { private: vector<vector<int>> dp; int paths(vector<vector<int>>& grid, int r, int c) { if (r+1 == grid.size() && c+1 == grid[0].size()) return 1; if (r == grid.size() || c == grid[0].size()) return 0; if (grid[r][c] == 1) return 0; if (dp[r][c] != 0) return dp[r][c]; dp[r][c] = 0; dp[r][c] += paths(grid, r + 1, c); dp[r][c] += paths(grid, r, c + 1); return dp[r][c]; } public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { if (obstacleGrid[obstacleGrid.size() - 1][obstacleGrid[0].size() - 1] == 1) return 0; dp = vector(obstacleGrid.size(), vector<int>(obstacleGrid[0].size(), 0)); return paths(obstacleGrid, 0, 0); } };