classSolution:defuniquePaths(self, m:int, n:int)->int:
total,down,right = m+n-2, n-1, m-1
n_val, m_val =1,1for i inrange(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的向下走的步数,其余的步数向右走。求出Ctotaldown的值,返回即可。组合公式:Cnm=m!Anm=m!(n−m)!n!=Cnn−m