題目描述
小明很喜歡數學,有一天他在做數學作業時,要求計算出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