列表data的值为[1, 3, 4, 5, 8, 9, 11],找出这个列表中和为13的两个数字的所有组合。这个好找,上过幼儿园大班的,估计都能找出来。4+9=13, 5+8=13。如何用python写一个函数来实现呢。
解法一:
超级大循环
最容易想到的就是遍历啊。嵌套循环,外层循环遍历全部列表,内层循环遍历当前元素位置之后的所有元素。内层循环中将两个数字相加,等于13就break。妥妥找到。def equalSum01(data=None, twosum=13):
result = []
for i, vi in enumerate(data):
if i + 1 > len(data) - 1:
break
for j, vj in enumerate(data[i+1:]):
if vi + vj == twosum:
print(vi, vj)
result.append((vi, vj))
break
return result
解法二:
首尾相加法
因为data是升序排列的一个列表,我们可以用两个指针l, r指向列表的两端,那么data[l]+data[r]的和有3种情况:
1、等于S,那就将这两个数字添加的结果列表中,l指针右移,r指针左移
2、小于S, 将l指针右移
3、大于S, r指针左移def equalSum02(data=None, twosum=13):
result = []
<