Last updated on October 9th, 2024 at 10:42 pm
Here, We see Unique Paths II LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc. with different approaches.
List of all LeetCode Solution
Topics
Array, Dynamic Programming
Companies
Bloomberg
Level of Question
Medium
Unique Paths II LeetCode Solution
Table of Contents
Problem Statement
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 testcases are generated so that the answer will be less than or equal to 2 * 109
.
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
1. Unique Paths II Leetcode Solution C++
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { if (obstacleGrid[0][0] == 1) return 0; int m = obstacleGrid.size(), n = obstacleGrid[0].size(); vector<vector<int>> dp(m, vector<int>(n,0)); dp[0][0] = 1; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) if (obstacleGrid[i][j] == 1 || (i == 0 && j == 0)) continue; else dp[i][j] = (i > 0 ? dp[i-1][j] : 0) + (j > 0 ? dp[i][j-1] : 0); return dp[m-1][n-1]; } };
2. Unique Paths II Leetcode Solution Java
class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { if (obstacleGrid[0][0] == 1) return 0; int m = obstacleGrid.length, n = obstacleGrid[0].length; int[][] dp = new int[m][n]; dp[0][0] = 1; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) if (obstacleGrid[i][j] == 1 || (i == 0 && j == 0)) continue; else dp[i][j] = (i > 0 ? dp[i-1][j] : 0) + (j > 0 ? dp[i][j-1] : 0); return dp[m-1][n-1]; } }
3. Unique Paths II Leetcode Solution JavaScript
var uniquePathsWithObstacles = function(obstacleGrid) { if (obstacleGrid[0][0]) return 0 let m = obstacleGrid.length, n = obstacleGrid[0].length let dp = Array.from({length: m}, el => new Uint32Array(n)) dp[0][0] = 1 for (let i = 0; i < m; i++) for (let j = 0; j < n; j++) if (obstacleGrid[i][j] || (!i && !j)) continue else dp[i][j] = (i ? dp[i-1][j] : 0) + (j ? dp[i][j-1] : 0) return dp[m-1][n-1] };
4. Unique Paths II Leetcode Solution Python
class Solution(object): def uniquePathsWithObstacles(self, obstacleGrid): if not obstacleGrid: return r, c = len(obstacleGrid), len(obstacleGrid[0]) dp = [[0 for _ in xrange(c)] for _ in xrange(r)] dp[0][0] = 1 - obstacleGrid[0][0] for i in xrange(1, r): dp[i][0] = dp[i-1][0] * (1 - obstacleGrid[i][0]) for i in xrange(1, c): dp[0][i] = dp[0][i-1] * (1 - obstacleGrid[0][i]) for i in xrange(1, r): for j in xrange(1, c): dp[i][j] = (dp[i][j-1] + dp[i-1][j]) * (1 - obstacleGrid[i][j]) return dp[-1][-1]