簡體   English   中英

如何在Python中記住唯一路徑的解決方案

[英]How to Memoize the solution to Unique Paths in Python

我已經嘗試解決這個問題一段時間了。 給出了AM x 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

問題在於矩陣的初始化。 本質上,您將創建在每一列中重復的同一行,因此,當您更新單元格時,所有列中的所有對應單元格都會被更新。

代替:

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

采用:

self.Mat = [[-1 for i in range(B)] for j in range(A)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM