0
点赞
收藏
分享

微信扫一扫

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

问题描述

在做力扣第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实例,多次调用该实例的方法,每次传入不同的参数(测试用例)。

总结

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

举报

相关推荐

0 条评论