如何调整双数求和代码 实现从列表中找出和为目标值的三个数
三数之和功能调整方案
原两数之和代码存在两处可先修正的问题:
- 变量名不统一:定义的列表变量是
numbers,循环中错误使用了未定义的invoices- 语法错误:匹配到结果的输出逻辑括号不完整,缺少
调整思路
完全基于你现有两数之和的逻辑做最小改动,不需要调整核心匹配规则:
- 新增外层循环固定第一个数的位置,计算「目标值减去第一个数」的剩余差值,作为后续两数之和的匹配目标
- 内层复用原有的两数之和逻辑,仅在第一个数之后的子数组中搜索,避免重复匹配相同的组合
- 匹配到符合条件的三个数后直接输出并终止循环,遍历完所有组合没有结果则输出无解决方案
完整可运行代码
numbers = [2, 4, 6, 8, 10] target_number = 12 # 外层循环固定第一个数,最多遍历到倒数第三个元素即可,预留两个位置给后两个数 for i, first_num in enumerate(numbers[:-2]): # 剩余两个数需要凑的目标值 remaining_target = target_number - first_num # 内层循环在i之后的子数组找两数之和等于remaining_target for j, second_num in enumerate(numbers[i+1:-1]): complementary = remaining_target - second_num # 第三个值要在第二个数的后面位置搜索,避免重复 if complementary in numbers[i+j+2:]: print(f"找到符合条件的三个数:{first_num}, {second_num}, {complementary}") # 只需要找第一个结果就加break,需要找所有组合可以删掉break用列表存结果 break else: # 内层循环没找到匹配,继续外层下一轮 continue # 内层找到结果,跳出外层循环 break else: print("No solutions exist")
运行说明
上述代码针对你给出的测试用例运行后,会输出找到符合条件的三个数:2, 4, 6,符合预期。如果需要更高的执行效率,可引入排序+双指针的优化方案,将时间复杂度从暴力匹配的O(n³)降到O(n²)。
内容的提问来源于stack exchange,提问作者Aristotelis Glykis
相关产品推荐
相关产品推荐

