62. 不同路径(Python)

题目

难度:★★★☆☆
类型:数学
方法:排列组合

传送门

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

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

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

说明:m 和 n 的值均不超过 100。

示例

示例 1

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

解释:
从左上角开始,总共有 3 条路径可以到达右下角。

  1. 向右 -> 向右 -> 向下
  2. 向右 -> 向下 -> 向右
  3. 向下 -> 向右 -> 向右

示例 2

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

解答

不论如何,从方格的(1, 1)位置走到(m, n)位置,机器人所走的路程是确定的,即(m+n-2)步,其中(m-1)步向右,(n-1)步向下,则可以看做是一个排列组合问题。

共有=种情况。

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        return comb(m+n-2, m-1)

def factorial(m):

    if m == 0:
        return 1
    res = 1
    for i in range(m, 1, -1):
        res *= i
    return res


def comb(m, n):
    return factorial(m) // (factorial(n) * factorial(m-n))

如有疑问或建议,欢迎评论区留言~

你可能感兴趣的:(62. 不同路径(Python))