Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
66 lines (51 loc) · 1.95 KB

File metadata and controls

66 lines (51 loc) · 1.95 KB
Copy raw file
Download raw file
Outline
Edit and raw actions

Difficulty: Medium

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?


Above is a 7 x 3 grid. 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

Solution

Language: Java

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] ways = new int[m + 1][n + 1]; // 所有的格子都能到达,因此初始化为0,表示没有计算过。该数组用于保存到达该坐标的路径个数,防止重复计算
        return uniquePaths(ways, m, n);
    }
​
    private int uniquePaths(int[][] ways, int m, int n) {
        if (ways[m][n] > 0) {
            return ways[m][n];
        }
        if (m * n == 0) {
            ways[m][n] = 0;
            return 0;
        }
        if (m == 1 || n == 1) {
            ways[m][n] = 1;
            return 1;
        }
        ways[m][n] = uniquePaths(ways, m, n - 1) + uniquePaths(ways, m - 1, n);
        return ways[m][n];
    }
}

这里第一次提交超时了,由于没考虑重复计算的问题,造成如果棋盘很大的情况下,会导致重复计算问题明显。

Morty Proxy This is a proxified and sanitized view of the page, visit original site.