#我提供此题的第二种写法,动态规划前面有人讲解就不说了,用python写,真的简单太多了。

这里一定要导入math包,主要是调用math.factorial

import math

class Solution:

    def uniquePaths(self , m , n ):
  
        x = m+n-2
        
        #注意,python除法用的是 //
        
        res = math.factorial(x) // (math.factorial(m-1)*math.factorial(n-1))

        return res

思路就是,利用组合C(a,b) 意思就是从b个球中,选出a个球的总的方法数

题中,m,n代表路径的最后坐标,

那么到达这个坐标的总的步长为m+n-2(往下走了n-1步,往左走了m-1步) == b

然后从这总的步数选出n-1种(或是m-1种) == a

C(n-1, m+n-2) == !(m+n-2) / !(m-1) * !(n-1)

python有累计公式.factorial。

动态递归/递归法,开销大,很多重复。

class Solution:

    def uniquePaths(self , m , n ):
  
        if m==1 or n==1:
        	return 1
        else:
        	return Solution.uniquePaths(m-1,n) + Solution.uniquePaths(m.n-1)