Python中如何打印不同类中LeetCode两数之和解法函数的返回结果
问题根因
- 你当前仅完成了Solution1、Solution2的类实例化操作,没有调用实例下封装的
twoSum_BF、twoSum_Dict业务方法,直接打印类实例只会输出对象的内存地址,无法得到两数之和的计算结果 - 类构造方法
__init__中接收的x、y参数没有被两个求和方法用到,属于冗余参数
最小改动修复方案
仅修改你代码末尾的打印逻辑,补充类方法调用即可正常输出结果:
x = [2, 7, 11, 15] y = 9 print("暴力破解法返回结果:") BF = Solution1(x, y) # 调用实例的twoSum_BF方法,传入数组和目标值参数 print(BF.twoSum_BF(x, y)) print("字典哈希法返回结果:") Dict = Solution2(x, y) # 调用实例的twoSum_Dict方法,传入数组和目标值参数 print(Dict.twoSum_Dict(x, y))
运行后输出结果为:
暴力破解法返回结果: [0, 1] 字典哈希法返回结果: [0, 1]
优化建议
如果想要简化调用逻辑,可以直接把数组、目标值参数在构造实例时存入实例属性,求和方法直接调用属性即可,不需要重复传参:
class Solution1: def __init__(self, nums, target): self.nums = nums self.target = target # 复杂度O(n²),列表越长性能越低 def twoSum_BF(self): for i in range(len(self.nums) - 1): for j in range(i + 1, len(self.nums)): if self.nums[i] + self.nums[j] == self.target: return [i, j] class Solution2: def __init__(self, nums, target): self.nums = nums self.target = target # 复杂度O(n),空间复杂度O(n),用空间换时间 def twoSum_Dict(self): seen = {} for i, num in enumerate(self.nums): if self.target - num in seen: return [seen[self.target - num], i] elif num not in seen: seen[num] = i # 调用逻辑简化 nums = [2, 7, 11, 15] target = 9 print("暴力破解法返回结果:", Solution1(nums, target).twoSum_BF()) print("字典哈希法返回结果:", Solution2(nums, target).twoSum_Dict())
内容的提问来源于stack exchange,提问作者Kevin Smith
相关产品推荐
相关产品推荐

