Difficulty: Medium

Related Topics: Array, Dynamic Programming

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?

Example 1:

62. Unique Paths - 图1

  1. Input: m = 3, n = 7
  2. 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

Example 3:

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

Example 4:

Input: m = 3, n = 3
Output: 6

Constraints:

  • 1 <= m, n <= 100
  • It’s guaranteed that the answer will be less than or equal to 2 * 10.

Solution

Language: Java

class Solution {

    int[][] memo;

    public int uniquePaths(int m, int n) {
        memo = new int[m + 1][n + 1];
        return dp(m, n);
    }

    // 定义:机器人从起到到终点的不同种走法
    // 起点 (1,1)
    // 终点 (m,n)
    private int dp(int m, int n) {
        // 出口
        // 1. m == 1 表示机器人只能向右走
        // 2. n == 1 表示机器人只能向下走
        if (m == 1 || n == 1) return 1;

        if (memo[m][n] != 0) return memo[m][n];

        // 机器人可以从两个方向走到终点,分别是:
        // 1. (m - 1, n) 从右边走到终点
        // 2. (m, n - 1) 从上边走到终点
        //
        // dp(m, n) = dp(m - 1, n) + dp(m, n - 1);
        return memo[m][n] = dp(m - 1, n) + dp(m, n - 1);
    }
}