通过递归就地修改

Posted

技术标签:

【中文标题】通过递归就地修改【英文标题】:In place modification through recursion 【发布时间】:2021-12-05 02:10:26 【问题描述】:

关于以下 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],但是当我返回它时,它返回空列表。

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

【问题讨论】:

stack.reverse() 返回None,而不是反向堆栈。 不能返回空列表。 【参考方案1】:

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

【讨论】:

以上是关于通过递归就地修改的主要内容,如果未能解决你的问题,请参考以下文章

梯度计算所需的变量之一已通过就地操作进行了修改:

单链表的逆置使用递归算法出现-842150451这个值,请求高手予以解决。。

如何使用在 Python 中就地修改的 .NET 方法?

Adam优化器错误:梯度计算所需的变量之一已通过就地操作进行了修改

删除列表列表中的第一项 - 制作副本而不是就地修改

找不到就地操作:梯度计算所需的变量之一已被就地操作修改