首页 > 解决方案 > 通过递归就地修改

问题描述

关于以下 leetcode 问题 #210,我尝试通过对堆栈进行就地修改来创建更精简的 DFS 算法,如下所示:

numCourses = 2
prerequisites = [[1,0]]

class Solution(object):
    def findOrder(self, numCourses, prerequisites):
        """
        :type numCourses: int
        :type prerequisites: List[List[int]]
        :rtype: List[int]
        """
        
        stack = []
        self.dfs(prerequisites, 0, stack)
        return stack.reverse()
    
    def dfs(self, prereqs, node, stack):
        for courses in prereqs:
            if node == courses[1] and courses[0] not in stack:
                self.dfs(prereqs, courses[0], stack)
        stack.append(node)

但是,当我在函数中返回堆栈时findOrder,它返回一个空列表。即使我在调试时,它也显示堆栈已用值更新,[0,1]但是当我返回它时,它返回空列表。

我想知道在尝试通过递归对列表进行就地修改时是否会遗漏任何含义。

标签: pythonrecursiondepth-first-searchlist-manipulation

解决方案


您只需要返回您的stack列表而不是stack.reverse(). 正如评论中指出的那样,.reverse()返回None而不是反向列表。


推荐阅读