刚刚尝试修改 leetcode 'Two Sum' 问题,使其输出为: '第一个数字的索引' + '剩余的数字的索引,加起来达到目标'
第一个数字的索引,即
[0]
始终是参考。
因此,
[2,3,4,6,7,8],10
永远是[0,5]
[3,2,5,1,8,90,34,78,23],93
因此[0,5]
其实可以通过稍微修改原来的解决方案来实现。
def sumri(num,target):
seen = {}
for i in range(len(num)):
diff = target - num[0]
seen[num[i]] = i
if diff in seen:
return (seen[num[0]],seen[diff])
但是,当我尝试放置时:
if diff in seen:
return (seen[num[0]],seen[diff])
else:
return 'sorry nothing adds up after 0'
每种情况下的输出都会转到
else
。
我错过了什么?
尝试不包括
else
,效果很好。
我只是想找出为什么执行直接进入else
即使在arr中找到相关数字之后。
经过修改,您的代码将始终在循环的
first迭代中执行
return
。除非您完成了循环的所有迭代,否则您无法知道答案是否是否定的。
修复方法很简单:将
return
语句放在 after 循环中。如果执行到达那里,则意味着 if
条件从未为真,不在循环的任何迭代中:
def sumri(num,target):
seen = {}
for i in range(len(num)):
diff = target - num[0]
seen[num[i]] = i
if diff in seen:
return (seen[num[0]],seen[diff])
return 'sorry nothing adds up after 0'