Unique Paths

Description

A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).

How many possible unique paths are there?

Note: m and n will be at most 100.

Example 1:

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 -> Right -> Down
2. Right -> Down -> Right
3. Down -> Right -> Right

Example 2:

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

Solutions

Combinatorial approach

(m+n2)!(m1)!(n1)!\frac{(m + n - 2)!} {(m - 1)!\,(n - 1)!}
class Solution {
public:
    int uniquePaths(int m, int n) {
        if(m < n) return uniquePaths(n, m);
        long long prod = 1;
        for(int i = m; i < m + n - 1; ++i){
            prod *= i;
        }
        for(int i = 2; i < n; ++i){
            prod /= i;
        }
        return prod;
    }
};

Dynamic programming

class Solution {
public:
    int uniquePaths(int m, int n) {
        if(m < 2 || n < 2) return 1;
        vector<vector<int>> dp(m, vector<int>(n,1));
        for(int i = 1; i < m; ++i){
            for(int j = 1; j < n; ++j){
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
};

Last updated