题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
解题思路:
0.采用双指针的方法
1.开始的时候,p和q指针分别指向序列的前两个数1和2
2.当p和q所指向的值之和小于tsum时,将q指针向前移,增加一个数到答案序列里
3.当p和q所指向的值之和大于tsum时,将p指针向前移,减少一个数到答案序列里
4.当找到一个连续序列和为tsum后,我们将q指针向前移,重复前面的2,3步的过程。
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
# write code here
#0.采用双指针的方法
#1.开始的时候,p和q指针分别指向序列的前两个数1和2
#2.当p和q所指向的值之和小于tsum时,将q指针向前移,增加一个数到答案序列里
#3.当p和q所指向的值之和大于tsum时,将p指针向前移,减少一个数到答案序列里
#4.当找到一个连续序列和为tsum后,我们将q指针向前移,重复前面的2,3步的过程。
if tsum<=0:
return []
p = 1
q = 2
curres = [p,q]
res = []
while p<q:
if sum(curres) < tsum:
q += 1
curres = range(p,q+1)
elif sum(curres) > tsum:
p += 1
curres = range(p,q+1)
elif sum(curres) == tsum:
res.append(curres)
q += 1
curres = range(p,q+1)
return res