LeetCode刷题之62.不同路径

LeetCode刷题之62.不同路径

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 题目
    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?
    LeetCode刷题之62.不同路径_第1张图片
    例如,上图是一个7 x 3 的网格。有多少可能的路径?
  • 说明
    m 和 n 的值均不超过 100。
  • 示例
示例1:
输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右
示例 2:
输入: m = 7, n = 3
输出: 28
  • 代码:
class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        total,down,right = m+n-2, n-1, m-1
        n_val, m_val = 1, 1
        for i in range(1,total+1):
            if i <= down:
                m_val = m_val * i
            if i > total - down:
                n_val = n_val * i
        return n_val // m_val
# 执行用时 :36 ms, 在所有 Python3 提交中击败了99.19%的用户
# 内存消耗 :13.7 MB, 在所有 Python3 提交中击败了5.14%的用户
  • 算法说明:
    题目是一个棋盘格式的路,因此,所走的路径总长度是固定的,等于一行n个格子与一列m个格子数目的加和,再减去起始和终点占用的两个格子,即total = m + n – 2;由于机器人只能向下和向右行走,并且两个方向的步数是固定的,right = m – 1,down = n – 1;将问题转化为排列组合问题,在所有的总步数中选择数目为down的向下走的步数,其余的步数向右走。求出 C t o t a l d o w n C_{total}^{down} Ctotaldown的值,返回即可。组合公式: C n m = A n m m ! = n ! m ! ( n − m ) ! = C n n − m C_n^m = \frac{{A_n^m}}{{m!}} = \frac{{n!}}{{m!(n - m)!}} = C_n^{n - m} Cnm=m!Anm=m!(nm)!n!=Cnnm

你可能感兴趣的:(胡萝卜的code_python,Python,LeetCode)