【发布时间】:2022-11-13 03:51:27
【问题描述】:
我是一个初学者,正在尝试解决两个和 leetcode(简单的问题)。 我知道我的代码是基本的,但是当我在另一个工作区(codecademy)中尝试它时它可以工作,如果 leet 代码输入只有 1 个列表,它也可以工作。
但是,当 leetcode 应用 2-3 个列表(站点上的测试用例)时,第 2 个和第 3 个列表返回 [0,0]。任何人都知道为什么它返回[0,0]?
我认为它与代码的第 2 行有关,该代码由 leetcode 一开始提供,与 Class solution: def twoSum(self, nums: List[int], target: int) -> List[int]: 相关,因为当我在 Codecademy 中提供不同的列表时,它可以工作。
我还尝试删除break,因为我认为这会阻止它获取多个输入,但它不能解决问题。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
lengthlist = len(nums)
a = 0
b = 0
for numbera in nums:
for numberb in nums:
if nums[a] + nums[b] == target:
if a < b:
return [a,b]
break
else:
return [b,a]
break
else:
continue
a += 1
b += 1
编辑/结论: 发现基于 cmets 的代码存在问题。
leetcode 问题指定我不能两次使用同一个元素。
我没有考虑到这一点,因为我在两个 for 循环上都使用了 range(0, len(nums))。当我在第二个for 循环开始时复制 AboAmar 的回复时,我意识到我的代码只有在使用 i+1 时才有效。
第二个测试用例有 [3,2,4] 和 6 个目标。我的代码返回 [0,0] 因为 3+3 是 6。但是 leetcode 输出 [1,2] 因为我不能在列表中两次使用相同的元素。
【问题讨论】:
-
那些中断是死代码,应该被删除。它们对您的程序没有任何影响。
-
您使用
numbera和numberb作为变量进行迭代,但随后在内部使用a和b代替。你的意思是做if numbera + numberb == target。那么a和b应该做什么呢?某种指数?如果需要索引,请使用enumerate -
“任何人都知道它为什么返回 [0,0]” - 99% 确定这是您代码中的错误。您的循环看起来很奇怪(例如,您没有使用
numbera/numberb)。该列表的值是什么,使该代码返回[0, 0]? -
@SembeiNorimaki:不过,他们需要索引和值。比较值,但返回索引。 python的
for in能做到吗? -
@SergioTulentsev 是的,像这样使用枚举:
for a, numbera in enumerate(nums)