一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

 

示例 1:

输入:m = 3, n = 7
输出:28

示例 2:

输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下

示例 3:

输入:m = 7, n = 3
输出:28

示例 4:

输入:m = 3, n = 3
输出:6

 

提示:

  • 1 <= m, n <= 100
  • 题目数据保证答案小于等于 2 * 109
Related Topics
  • 数学
  • 动态规划
  • 组合数学

  • 👍 1141
  • 👎 0
  • 机器人行走路径只能向右或者向下。那么每个到达每个格子的上一步可能是左边往右过来的,或者是上面一个格子下来的

    边界情况,横向第0行或者纵向第一列只有一种可能性。你可以选择单独初始化或者外面部分的值取0。

    class Solution {
        public int uniquePaths(int m, int n) {
            int[][] dp = new int[m][n];
            Arrays.fill(dp[0],1);
            for (int row = 1; row < m; row++) {
                dp[row][0] = 1;
                for (int col = 1; col < n; col++) {
                    dp[row][col] = dp[row][col-1] + dp[row-1][col];
                }
            }
            return dp[m-1][n-1];
        }
    }
    

    当然,如果你把这个图右旋45°的话,你会看到这样一幅图

    是不是非常眼熟?对他就是LeetCode刷题【118】杨辉三角LeetCode刷题【119】杨辉三角 II