报错解决:力扣提交后的执行结果与执行代码的结果不一致(解答错误)

博主揭示了在解决LeetCode第17题时,本地编译与在线评测结果不一致的困扰,关键在于未初始化类变量。文章详述了问题发生的原因及解决策略,提醒开发者注意在多例复用时的初始化问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

在做力扣第17道题目(电话号码的字母组合)时,写了一个递归函数,在编译器本地、在力扣设置测试用例后执行代码的结果都没有问题,但提交后答案出错。

在本地的运行结果与提交后的运行结果不一致。

这是设置测试用例后执行代码的结果:
在这里插入图片描述
这是提交之后的结果:

在这里插入图片描述
注意到,一模一样的测试用例,结果居然不一样!并且刚好是第二个测试用例出错。

原始代码如下:

class Solution:
    table = [[], [], ['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l'], ['m', 'n', 'o'],
             ['p', 'q', 'r', 's'], ['t', 'u', 'v'], ['w', 'x', 'y', 'z']]
    rs = []

    def dfs(self, digits, pos, curr_str=''):
        if pos >= len(digits):
            self.rs.append(curr_str)
            return
        for ch in self.table[int(digits[pos])]:
            self.dfs(digits, pos+1, curr_str + ch)


    def letterCombinations(self, digits):
        if len(digits) == 0:
            return []
        self.dfs(digits, 0)
        return self.rs

原因分析与解决方案

最终我找到了原因所在,在其记录,希望对后来的同学能有启发。

我的错误的原因在于:

我将rs定义成为了类的成员变量,在每次调用letterCombinations方法获取返回结果时并没有将rs初始化,所以rs会不断append。

由此可以分析出力扣评测的方式:对于所有的测试用例,只创建一个Solution实例,多次调用该实例的方法,每次传入不同的参数(测试用例)。

总结

如果将返回结果定义成了类的成员变量,在类获取结果的方法中必须将其初始化!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值