当前位置: 首页 > 知识库问答 >
问题:

矩阵中唯一路径数

麹耘豪
2023-03-14

我遇到的问题是:

机器人位于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)

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

共有1个答案

翟俊茂
2023-03-14

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

 类似资料:
  • NowCoder 题目描述 判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向上下左右移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如下面的矩阵包含了一条 bfce 路径。 解题思路 使用回溯法(backtracking)进行求解,它是一种暴力搜索方法,通过搜索所有可能的结果来求解问题。回溯法在一次搜

  • 一、题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中间向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。 举例分析 例如在下面的3*4的矩阵中包含一条字符串”bcced”的路径。但矩阵中不包含字符串“abcb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二格子之后,路径

  • 我不知道该如何解决这个问题。我得到了一个有12个节点A-L的图。17个边缘连接它们。我被告知要找到从A到L的所有路径。我可以遍历一个节点多次,但只能遍历一次边。输出应该打印每个路径和路径总数。 例如,如果只有1个路径。输出应为: 我想一个递归的深度优先搜索函数应该可以解决这个问题,但我就是想不出一个打印每一条路径的方法。例如,如果我的函数找到一个路径ABDL并到达结尾L,它将打印ABDL。然后它回

  • 基于我下面链接的相关问题(请参见@Aleh solution):我希望只计算给定幂的矩阵中列之间的唯一乘积。 例如,对于N=5,M=3,p=2,我们得到列(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)的乘积。我想修改(@Aleh)代码,只计算(1,1)、(1,2)、(1,3)、(2,2)、(2,3)、(3,3)列之间的乘积。但我想对每个第

  • 例如,给定以下矩阵: 其中对于每个元组,第一个数字是食物,第二个数字是水。我需要从右下角到左上角,我只能向上或向左移动。

  • 我正在做一个应用程序,将找到所有的字,可以与相邻的瓷砖在一个4x4网格(Boggle)。我已经到了可以输入一串字母的地方,算法将在最佳时间内找到所有可用的单词。然而,我需要知道的不仅仅是有效的词,但他们的方块在黑板上的位置。 这里是主要的游戏类。该算法递归地从一个字母开始,然后检查是否存在以该字母加上其邻居开始的单词。如果不存在单词,路径将被阻塞,算法将继续到下一个字母。如果有一个单词带有该前缀,