Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 矩阵中唯一路径的数目_Python_Algorithm_Python 3.x_Data Structures_Dynamic Programming - Fatal编程技术网

Python 矩阵中唯一路径的数目

Python 矩阵中唯一路径的数目,python,algorithm,python-3.x,data-structures,dynamic-programming,Python,Algorithm,Python 3.x,Data Structures,Dynamic Programming,我遇到的问题是: 机器人位于m x n网格的左上角。机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角。有多少种可能的唯一路径 我提交的代码是: class Solution(object): def uniquePaths(self,m,n): # m : (int) rows # n : (int) cols mat = [[0] * n] * m for i in range(n):

我遇到的问题是:

机器人位于m x n网格的左上角。机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角。有多少种可能的唯一路径

我提交的代码是:

class Solution(object):
    def uniquePaths(self,m,n):

        # m : (int) rows
        # n : (int) cols

        mat = [[0] * n] * m

        for i in range(n):
            mat[0][i] = 1


        for i in range(m):
            mat[i][0] = 1

        for i in range(1,m):
            for j in range(1,n):
                mat[i][j] = mat[i - 1][j] + mat[i][j - 1]

        return mat[m - 1][n - 1]
提交后,我知道我的代码只比其他提交的代码快21%。这意味着我的代码不是最优的。所以出于好奇,我检查了另一份提交的文件,它比我的要快得多

更好的解决方案是:

class Solution(object):
    def uniquePaths(self, m, n):
        p = 1
        for i in xrange(n,m+n-1):
            p *= i
        return p/self.factorial(m-1)

    def factorial(self,n):
        if n == 0:
            return 1
        return n*self.factorial(n-1)

正如你所看到的,它的时间复杂度是线性的,而我的是二次的。但是我无法理解它背后的逻辑。

这不需要计算机程序。这是一个简单的组合问题。想象m个向右箭头和n个向下箭头。问这个问题的另一种方式是我们可以用多少种方式排列这些箭头?我们可以从m+n中为右箭头选择m个点。所以答案是二项式的(m,m+n)

关于factorial的复杂性,你是对的,但我认为factorial函数只用于计算m的factoriak。for循环持续(m+n-1-m)次。所以复杂性是O(min(m,n+1)),一个好问题是打印所有可能的路径。我想你的方法会给你比别人更快的结果!