Python如何返回多个值?两数之和问题优化求解
两数之和:返回所有符合条件的数对
你这段代码的问题很明显——找到第一组合条件的数对就直接return退出函数了,所以只能拿到第一组结果。要返回所有符合要求的数对,只需要把找到的数对都收集起来,等循环跑完再一起返回就行。
修改后的代码
def twoSum(arr, A): result = [] # 用空列表存所有符合条件的数对 for i in range(len(arr)): for j in range(i+1, len(arr)): if arr[i] + arr[j] == A: result.append((arr[i], arr[j])) # 找到一组就加进列表 return result # 循环结束后返回全部结果 print(twoSum([1,2,3,4],5)) # 输出:[(1, 4), (2, 3)]
核心修改点
- 新增
result = []来存储所有匹配的数对,替代原代码中找到一个就返回的逻辑 - 把原代码里的
return(arr[i], arr[j])换成result.append((arr[i], arr[j])),将每一组符合条件的数对添加到列表中 - 等所有循环都执行完,再通过
return result返回收集到的所有数对
额外补充:处理重复元素的情况
如果你的数组里有重复元素(比如[1,1,2,3],目标数为4),上面的代码会返回[(1,3),(1,3)]这种重复的数对。如果需要去重,可以先对数组做去重处理:
def twoSum(arr, A): result = [] unique_arr = list(set(arr)) # 去重后的数组 for i in range(len(unique_arr)): for j in range(i+1, len(unique_arr)): if unique_arr[i] + unique_arr[j] == A: result.append((unique_arr[i], unique_arr[j])) return result print(twoSum([1,1,2,3],4)) # 输出:[(1, 3)]
内容的提问来源于stack exchange,提问作者HaziqKha17
相关产品推荐
相关产品推荐

