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

如何在Python中记忆唯一路径的解决方案

滕星纬
2023-03-14

我试图解决这个问题已经有一段时间了。给出了一个M×N网格,我们必须找到从左上角到右下角的路径数。

不过问题很简单;也有很多解决方案。这是细节。http://www.interviewbit.com/courses/programming/topics/math/problems/paths/http://articles.leetcode.com/2010/11/unique-paths.html

我用Java解决了这个问题,并用Python编写了另一个解决方案。现在我想用记忆表格修改之前的解决方案,以便在右下角的单元格中收集最终答案。单元格的值是其左右相邻单元格的总和。

这是我无法调试的代码:-

class Solution:
    #Actual Recursive function
    def paths(self,row,col):
        if row == 0 or col == 0:
            self.Mat[row][col] = 1
            return 1
        self.Mat[row][col-1] = self.paths(row, col-1)
        self.Mat[row-1][col] = self.paths(row-1, col)
        self.Mat[row][col] = self.Mat[row][col-1] + self.Mat[row-1][col]
        return self.Mat[row][col] 

    # Driver Function. This will be called
    def uniquePaths(self, A, B): 
        self.Mat = [[-1]*B]*A
        ans = self.paths(A-1, B-1)
        return self.Mat[A-1][B-1]

这是我以前的解决方案,它可以工作,但不使用记忆表。

class OldSolution:
    def paths(self,row,col):
        if row==0 or col==0:
            return 1
        elif row<0 or col<0:
            return 0
        elif row >0 and col > 0:
            return self.paths(row-1,col) + self.paths(row,col-1)            
    def uniquePaths(self, A, B):
        Mat = [ [-1] * B ] *A
        return self.paths(A-1, B-1)

sol = OldSolution()
print sol.uniquePaths(3,3) # Prints 6

测试用例:-3,3=6

15, 9 = 319770

共有1个答案

羊舌赞
2023-03-14

问题在于矩阵的初始化。实际上,您在每一列中创建了相同的重复行,因此当您更新单元格时,所有列中的所有对应单元格都会得到更新。

而不是:

self.Mat = [[-1]*B]*A

使用:

self.Mat = [[-1 for i in range(B)] for j in range(A)]
 类似资料:
  • 我试图通过记忆来解决“计数变化”的问题。 考虑下面的问题:我们可以用多少种不同的方式来换取1美元,半价、四分之一、二分硬币、五分硬币和五分硬币?更一般地说,我们可以编写一个函数来计算使用任何一组货币面额改变任何给定金额的方法的数量吗? 以及递归的直观解决方案。 使用n种硬币改变a的数量的方法数 除第一种硬币外,其他所有硬币都可以换成硬币的方法,加上 使用所有n种硬币改变较小数量a-d的方法的数量,

  • 我遇到的问题是: 机器人位于m x n网格的左上角。机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角。有多少种可能的独特路径? 我提交的代码是: 提交后,我知道我的代码只比其他提交的代码快21%。这意味着我的代码不是最优的。出于好奇,我检查了另一份提交的文件,它比我的要快得多。 更好的解决方案是: 如你所见,它的时间复杂度是线性的,而我的是二次的。但我无法理解背后的逻辑。

  • 问题内容: 我正在使用Debian。我安装了Python 3.2.3。Python 3的路径是/ usr / bin / python3。如何在Spyder中更改它? 问题答案: 按下以打开“首选项”窗口。在此窗口中,选择左侧的项目,然后选择选项卡。Python可执行文件的路径就在此处。

  • 在Spring中,可以在单独的模块中定义bean依赖项,然后在运行时通过解析这些依赖项。在Quarkus中有可能做类似的事情吗? 例如,多模块设置如下所示: 在Spring中,可以在模块中定义,该模块通过其当前上下文的在运行时解析具体的依赖关系,或,允许在测试时注入虚拟或测试依赖关系,还有生产人工制品中的真品。 例如,中的一个类需要一个的实例。的实现在或模块中定义。模块不直接依赖于或模块。 一些代

  • 我刚到爪哇。我正在上大学初学者Java课程。我正在运行我的第一个hello world代码,并得到一条错误消息。我已经安装了最新的Dr.Java稳定版本,并安装了Java SE 12 JDK。 我已经卸载和重新安装了几次Dr Java,但仍然收到错误消息。我也重新编译了它,但错误信息仍然存在。 我希望代码输出在interactions窗格下显示“Hello World”,但事实并非如此,而是出现了

  • 本文向大家介绍Struts2学习笔记(2)-路径问题解决,包括了Struts2学习笔记(2)-路径问题解决的使用技巧和注意事项,需要的朋友参考一下   在struts2中的路径问题是根据Action的路径而不是JSP的路径确定的,所以尽量不要使用相对路径,使用相对路径会让路径问题变得很繁琐很麻烦,有的时候一个细微的变动会导致你需要大的改动。   解决方法其实也很简单:即统一使用绝对路径。   在j