leetcode多个测试用例之间相互影响导致提交失败

背景

在做一道easy题,二叉树的中序遍历,我提交的代码如下

from typing import (
    Optional,
    List
)

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
class Solution:
    def __init__(self,res:List[int]=[]):
        self.res = res
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if root is None:
            return []
        self.inorderTraversal(root.left)
        self.res.append(root.val)
        self.inorderTraversal(root.right)
        return self.res

测试用例的第三个把我看蒙了

后面的3,2,1哪里来的???在本地运行,结果就是[1]

解决过程

直到我问了神奇海螺,得到以下回复

https://chat.openai.com/share/6e9e7fc7-d99c-425a-994e-f8c95882d46e

你遇到的问题很有可能是因为在 Solution 类的构造函数中默认使用了可变的默认参数。在 Python 中,如果使用可变对象(如列表)作为函数或方法的默认参数,该对象只会在函数定义时创建一次。之后的每次调用,如果不指定该参数,都会使用同一个默认对象。这就可能导致你在 LeetCode 上进行多个测试时,前一次的结果影响了后一次的测试。

在你的代码中,Solution 类的 __init__ 方法使用了一个列表作为默认参数。因此,如果你创建多个 Solution 实例而不重置 res,每个实例都会共享同一个 res 列表,从而导致结果累加。

解决这个问题的一个方法是在构造函数中不使用可变的默认参数,而是将 res 初始化为 None,然后在方法体内检查并初始化它。这样每个实例都会拥有自己的 res 列表。

解决方案

将构造函数改成

def __init__(self,res:Optional[List[int]]=None):
    if res is None:
        res = []
        self.res = res

相关推荐

  1. 测试相关问题

    2024-04-26 06:34:06       29 阅读
  2. leetcode76最后一个测试无法通过

    2024-04-26 06:34:06       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-26 06:34:06       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-26 06:34:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-26 06:34:06       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-26 06:34:06       20 阅读

热门阅读

  1. flutter开发实战-混淆minifyEnabled及shrinkResources

    2024-04-26 06:34:06       10 阅读
  2. 安卓手机APP开发__媒体开发部分__调试的日志

    2024-04-26 06:34:06       15 阅读
  3. 2014NOIP普及组真题 1. 珠心算测验

    2024-04-26 06:34:06       15 阅读
  4. 定时任务管理系统详细设计说明书

    2024-04-26 06:34:06       11 阅读
  5. git commit 提交信息规范

    2024-04-26 06:34:06       15 阅读
  6. jmeter分布式压力测试搭建

    2024-04-26 06:34:06       14 阅读
  7. Ajax&Axios

    2024-04-26 06:34:06       14 阅读
  8. 计算机视觉(CV)技术的优势和挑战

    2024-04-26 06:34:06       14 阅读
  9. vue:使用:element 中弹框中获取table高度无效

    2024-04-26 06:34:06       10 阅读
  10. 6.Linux常用命令---文件目录管理(3)

    2024-04-26 06:34:06       11 阅读
  11. AR模块中通用对账的优化尝试

    2024-04-26 06:34:06       12 阅读
  12. CocoaPods使用详解

    2024-04-26 06:34:06       11 阅读