题目:
一个机器人位于一个
m x n
网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
示例:
示例 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
解法:
由于起点在右上角,终点在右下角,所以必然需要向右走n-1次,向下走m-1次,只是向右向下的顺序不同,所以转为组合问题。一共需要走n-1+m-1次,其中有n-1次是向右走,剩下都是向下走,所以C(n-1+m-1,n-1)。
知识点:
1.math.factorial(n):n是正整数,返回给定数字n的阶乘。
代码:
class Solution: def uniquePaths(self, m: int, n: int) -> int: def CombinationNumber(n, m): if m <= n: return factorial(n) / (factorial(n - m) * factorial(m)) return int(CombinationNumber(m - 1 + n - 1, m - 1))