[
dp
math
]
Leetcode 0062. Unique Paths
https://leetcode.com/problems/unique-paths
1. Dynamic programming solution
One way to solve this problem is to use dynamic programming: define by dp[i][j]
number of ways to reach point (i,j)
. How can we reach it, there are two options:
- We can reach it from above
(i, j-1)
. - We can reach it from the left:
(i-1, j)
.
That is all! We just evaluate dp[i][j] = dp[i-1][j] + dp[i][j-1]
Complexity: time comlexity is O(mn)
, space complexity is O(mn)
, which can be improved to O(min(m,n))
.
class Solution:
def uniquePaths(self, m, n):
dp = [[1] * n for _ in range(m)]
for i,j in product(range(1,m),range(1,n)):
dp[i][j] = dp[i-1][j] + dp[i][j-1]
return dp[-1][-1]
2. Math solution
Note, that we need to make overall n + m - 2
steps, and exactly m - 1
of them need to be right moves and n - 1
down steps. By definition this is numbef of combinations to choose n - 1
elements from n + m - 2
.
Complexity: time complexity is O(m+n)
, space complexity is O(1)
.
class Solution:
def uniquePaths(self, m, n):
return factorial(m+n-2)//factorial(m-1)//factorial(n-1)
If you like the solution, you can upvote it on leetcode discussion section: Problem 0062