1.题目
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。
思路:维护两个指针,一个指针指向这个连续正数序列的开始,一个指向连续正数序列的结束,判断当前的序列和与目标的关系,不断更新这两个指针的位置。
2.思路
思路:维护两个指针,一个指针指向这个连续正数序列的开始,一个指向连续正数序列的结束,判断当前的序列和与目标的关系,不断更新这两个指针的位置。
(1)当连续序列和curSum==S时,表明找到合适序列,将序列存入列表;指向序列尾部的j指针往后移一位,将所指位置的数字加到curSum中,方便下一次的判断;
(2)当curSum>S时,从现有连续序列之和curSum中减去i,并将i+1;
(3)当curSum<S时,j指针往后移一位,执行j+1,curSum加上j。
3.代码
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
# write code here
res = []
i = 1
j = 2
curSum = i+j
while i<=tsum/2:
if curSum == tsum:
res.append(range(i, j+1))
j = j+1
curSum +=j
elif curSum > tsum:
curSum -= i
i = i+1
else:
j +=1
curSum += j
return res