LeetCode 0062. Unique Paths Solution in Java, Python, C++, JavaScript, Go & Rust | Explanation + Code

CoderIndeed
0
0062. Unique Paths

Description

There is a robot on an m x n grid. The robot is 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.

Given the two integers m and n, 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.

 

Example 1:

Input: m = 3, n = 7
Output: 28

Example 2:

Input: m = 3, n = 2
Output: 3
Explanation: From the top-left corner, there are a total of 3 ways to reach the bottom-right corner:
1. Right -> Down -> Down
2. Down -> Down -> Right
3. Down -> Right -> Down

 

Constraints:

  • 1 <= m, n <= 100

Solutions

Solution 1: Dynamic Programming

We define f[i][j] to represent the number of paths from the top left corner to (i, j), initially f[0][0] = 1, and the answer is f[m - 1][n - 1].

Consider f[i][j]:

  • If i > 0, then f[i][j] can be reached by taking one step from f[i - 1][j], so f[i][j] = f[i][j] + f[i - 1][j];
  • If j > 0, then f[i][j] can be reached by taking one step from f[i][j - 1], so f[i][j] = f[i][j] + f[i][j - 1].

Therefore, we have the following state transition equation:

$$ f[i][j] = \begin{cases} 1 & i = 0, j = 0 \ f[i - 1][j] + f[i][j - 1] & \textit{otherwise} \end{cases} $$

The final answer is f[m - 1][n - 1].

The time complexity is O(m × n), and the space complexity is O(m × n). Here, m and n are the number of rows and columns of the grid, respectively.

We notice that f[i][j] is only related to f[i - 1][j] and f[i][j - 1], so we can optimize the first dimension space and only keep the second dimension space, resulting in a time complexity of O(m × n) and a space complexity of O(n).

PythonJavaC++GoTypeScriptRustJavaScript
class Solution: def uniquePaths(self, m: int, n: int) -> int: f = [[0] * n for _ in range(m)] f[0][0] = 1 for i in range(m): for j in range(n): if i: f[i][j] += f[i - 1][j] if j: f[i][j] += f[i][j - 1] return f[-1][-1](code-box)

Solution 2

PythonJavaC++GoTypeScriptJavaScript
class Solution: def uniquePaths(self, m: int, n: int) -> int: f = [[1] * n for _ in range(m)] for i in range(1, m): for j in range(1, n): f[i][j] = f[i - 1][j] + f[i][j - 1] return f[-1][-1](code-box)

Solution 3

PythonJavaC++GoTypeScriptJavaScript
class Solution: def uniquePaths(self, m: int, n: int) -> int: f = [1] * n for _ in range(1, m): for j in range(1, n): f[j] += f[j - 1] return f[-1](code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !