# Unique Paths https://leetcode.com/problems/unique-paths/ ## Approach 1: Bottom-Up [[dp|DP]] Utilized the fact that there's only one way to reach grids in the first row/column to avoid handling edge indices. ```python dp = [[1] * n for _ in range(m)] for col in range(1, m): for row in range(1, n): dp[col][row] = dp[col - 1][row] + dp[col][row - 1] return dp[m - 1][n - 1] ``` ## Approach 2: Closed Form Expression Total of `(m - 1) + (n - 1)` moves are needed, `m - 1` of them are down, `n - 1` of them are right. Therefore the result can be expressed as $ {m - n + 2 \choose m - 1} = {m - n + 2 \choose n - 1} = \frac{(m - n + 2)!}{(m - 1)! (n - 1)!} $ ```python from math import factorial return factorial(m + n - 2) // factorial(n - 1) // factorial(m - 1) ```