Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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_Optimization_Dynamic Programming_Memoization - Fatal编程技术网

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

如何在Python中记忆唯一路径的解决方案,python,algorithm,optimization,dynamic-programming,memoization,Python,Algorithm,Optimization,Dynamic Programming,Memoization,我试图解决这个问题已经有一段时间了。给出了一个mxn网格,我们必须找到从左上角到右下角的路径数 虽然问题很简单;还有很多解决方案。以下是详细情况。 我用Java解决了这个问题,并用Python编写了另一个解决方案。现在我想用记忆表修改前面的解决方案,以便在右下角的单元格中收集最终答案。单元格的值是其左右相邻单元格的总和 以下是我无法调试的代码:- class Solution: #Actual Recursive function def paths(self,row,col

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

虽然问题很简单;还有很多解决方案。以下是详细情况。


我用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
class解决方案:
def路径(自身、行、列):
如果行==0或列==0:
返回1
elif第0行:
返回自路径(第1行,第1列)+自路径(第1行,第1列)
def唯一路径(自身、A、B):
Mat=[-1]*B]*A
返回自路径(A-1,B-1)
sol=OldSolution()
打印sol.唯一路径(3,3)#打印6
测试用例:- 3,3=6


15,9=319770

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

而不是:

self.Mat = [[-1]*B]*A
使用:


哇!谢谢在这种特殊情况下,[[-1代表范围(B)中的i]代表范围(A)]中的j.“一个单元格的值是其右相邻单元格和左相邻单元格的总和。”看起来它实际上是上述单元格和左相邻单元格的总和。(根据你的leetcode.com链接,路径只能向右或向下移动。)你第一次链接到interviewbit.com会生成一个登录页面——无论你打算向我们展示什么,都似乎只是会员。我认为第二种方法很好地概括了这个问题,但您可能想在文本中提到“只向下或向右移动”规则,因为我的第一个想法是“有更多的路径”。另一种方法是:Python的元组是可散列的,因此它们可以用作字典键。您的记忆缓存可以是一个将
(行,列)
元组映射到
int
dict
。或者,如果您觉得它没有作弊(并且您使用的是Python3.2或更高版本),请使用decorator。
self.Mat = [[-1 for i in range(B)] for j in range(A)]