题目内容
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
题目思路
在这里我们假定连续的整数序列长度至少为2。对于tsum,我们首先设定一个最大可能,也就是中值。因为中值和大于中值的两个数就可以等于或者大于tsum。我们设定left,right两个指针用来界定序列的左右侧边界。
程序代码
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
# write code here
if tsum<3:
return []
else:
mid=tsum//2+1
left,right=1,2
res=[]
while right<=mid:
tmp=sum(range(left,right+1))
if tmp==tsum:
res.append([i for i in range(left,right+1)])
right+=1
elif tmp<tsum:
right+=1
else:
left+=1
return res