1

我试图解决797. 从源到目标 的所有路径Leetcode。我想过使用带有递归的回溯。在下面的代码中,setOfPaths当我从path. 我不确定我在这里做错了什么。

class Solution(object):
    def allPathsSourceTarget(self, graph):
        path=[]
        setOfPaths=[]
        path.append(0)
        self.backtrack(graph,0,len(graph)-1,path,setOfPaths)
        return setOfPaths
    
    def backtrack(self,graph,src,dest,path,setOfPaths):
        if(src == dest):
            setOfPaths.append(path)
        else:
            for node in graph[src]:
                path.append(node)
                self.backtrack(graph,node,dest,path,setOfPaths)
                path.pop(len(path)-1)  #BackTracking
4

1 回答 1

0

当您尝试附加path到 时setOfPaths,它并没有真正附加path的数据,而是附加了对pathpath变量本身的引用。因为setOfPaths不包含数据,它包含变量,当您修改变量内部的数据时,您会看到setOfPaths也被修改。

要摆脱它,最简单的方法是存储变量的副本,这样当您尝试修改“主”变量时就不会修改数据。

这段代码应该可以工作

if(src == dest):
    setOfPaths.append(path[:])
于 2020-12-13T09:42:41.480 回答