问题描述
在做力扣第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实例,多次调用该实例的方法,每次传入不同的参数(测试用例)。
总结
如果将返回结果定义成了类的成员变量,在类获取结果的方法中必须将其初始化!