为何我的for循环仅执行首个循环项就终止?(LeetCode两数之和问题)
问题:两数之和算法无法处理索引相同的情况
我是编程新手,尝试用已掌握的基础内容解决LeetCode经典的两数之和问题。我的程序能够找到解的索引,但无法识别并忽略索引相同的情况。我想知道仅用现有知识是否可以解决该问题,恳请各位提供帮助。附上我的代码:
num = [3, 3] target = 6 def twonum(num): for x in num: for y in num: a = num.index(x) b = num.index(y) if (x + y == target) and (a != b): return(f'{b, a}') break ans = twonum(num) print(ans)
解决方法
你的问题核心有两个:
num.index(x)只会返回数组中第一个匹配元素的索引,遇到重复元素(比如两个3)时,无法正确获取后续重复元素的真实索引;- 嵌套循环遍历所有元素对,但没做索引去重,导致同一位置的元素被错误检查。
用你已经掌握的基础循环知识就能搞定,直接操作索引而非元素是最直接的方案:
num = [3, 3] target = 6 def twonum(num): # 遍历第一个元素的索引i for i in range(len(num)): # 内层循环从i+1开始,直接跳过i=j的情况,还能减少重复检查 for j in range(i + 1, len(num)): if num[i] + num[j] == target: return (j, i) ans = twonum(num) print(ans)
如果想保留遍历元素的习惯,也可以用enumerate()(这是Python基础工具,专门用来同时获取索引和元素值):
num = [3, 3] target = 6 def twonum(num): for idx1, x in enumerate(num): for idx2, y in enumerate(num): if x + y == target and idx1 != idx2: return (idx2, idx1) ans = twonum(num) print(ans)
这两种方法都不需要额外的复杂知识,完全用基础的循环、索引操作就能解决你的问题。
内容的提问来源于stack exchange,提问作者Snails
相关产品推荐
相关产品推荐

